python实现归并排序(算法4)
还是算法4上的代码通俗易懂,看了下之前自己写的代码,一大坨,看得人晕晕乎乎的,所以照着书上的思路写了一遍
- 时间复杂度:
- 最好:O(nlog n)
- 最坏:O(n*n)
- 平均:O(nlog n)
- 空间复杂度:O(n)
- 稳定性:稳定
自顶向下递归实现
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)