python实现归并排序(算法4)

还是算法4上的代码通俗易懂,看了下之前自己写的代码,一大坨,看得人晕晕乎乎的,所以照着书上的思路写了一遍

  1. 时间复杂度:
    • 最好:O(nlog n)
    • 最坏:O(n*n)
    • 平均:O(nlog n)
  2. 空间复杂度:O(n)
  3. 稳定性:稳定

自顶向下递归实现

def merge_sort(arr, first, last):
    if first >= last:
        return
    mid = first + (last - first) // 2
    merge_sort(arr, first, mid)
    merge_sort(arr, mid + 1, last)
    merge2(arr, first, mid, last)

def merge2(arr, low, mid, high):
    import copy
    arr2 = copy.deepcopy(arr)
    i, j = low, mid+1

    for k in range(low, high + 1):
        if i > mid:
            arr[k] = arr2[j]
            j += 1
        elif j > high:
            arr[k] = arr2[i]
            i += 1
        elif arr2[j] < arr2[i]: # 这里别搞错了,是arr2!!
            arr[k] = arr2[j]
            j += 1
        else:
            arr[k] = arr2[i]
            i += 1

自底向上循环实现

def bottom_up_merge_sort(arr):
    N = len(arr)
    sz = 1

    while sz < N:
        lo = 0
        while lo < N - sz:
            merge(arr, lo, lo+sz-1, min(lo+sz+sz-1, N-1))
            lo += sz +sz
        sz = sz+sz
    print(arr)
posted @ 2021-07-29 17:57  水天需  阅读(57)  评论(0编辑  收藏  举报