Python归并排序

Python归并排序

思想

  1. 将序列不断二分至序列长度为1
  2. 将子序列两两排序合并,最终返回有序序列
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) 稳定

图片来源于:菜鸟教程

你可能感兴趣的:(python数据结构算法)