python實現歸併排序(演算法4)
阿新 • • 發佈:2021-07-29
還是演算法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)