Files
suanfa/public/py/ch2/mergesort/mergesort.py
T
2026-06-16 09:35:51 +08:00

51 lines
1.1 KiB
Python

"""
归并排序 — 分治法的经典应用
时间复杂度 O(n log n),空间复杂度 O(n)
"""
def merge(arr, left, mid, right):
"""合并两个有序子数组"""
# 创建临时数组
L = arr[left:mid + 1]
R = arr[mid + 1:right + 1]
i = j = 0
k = left
# 合并两个有序数组
while i < len(L) and j < len(R):
if L[i] <= R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
# 复制剩余元素
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
def merge_sort(arr, left, right):
"""归并排序主函数"""
if left < right:
mid = (left + right) // 2
merge_sort(arr, left, mid)
merge_sort(arr, mid + 1, right)
merge(arr, left, mid, right)
def sort(arr):
merge_sort(arr, 0, len(arr) - 1)
if __name__ == "__main__":
data = [38, 27, 43, 3, 9, 82, 10]
print("排序前:", data)
sort(data)
print("排序后:", data)