思想:
def merge_sort(alist):
'''归并排序'''
n = len(alist)
if n <= 1:
return alist
mid = n // 2 # 二分
left = merge_sort(alist[:mid])
right = merge_sort(alist[mid:])
return merge(left, right)
def merge(left, right):
'''合并操作,将有序数组 left[] 和 right[] 合并成一个大的有序数组'''
l, r = 0, 0 # left 与 right 的下标指针
result = []
while l < len(left) and r < len(right):
if left[l] <= right[r]:
result.append(left[l])
l += 1
else:
result.append(right[r])
r += 1
result += left[l:]
result += right[r:]
return result
alist = [3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
merge_sort(alist)
print(alist2)
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
总结:
最优时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|---|
O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( 1 ) O(1) O(1) | 稳定 |
图片来源于:菜鸟教程