1. 程式人生 > 其它 >python實現歸併排序(演算法4)

python實現歸併排序(演算法4)

還是演算法4上的程式碼通俗易懂,看了下之前自己寫的程式碼,一大坨,看得人暈暈乎乎的,所以照著書上的思路寫了一遍

自頂向下遞迴實現

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)