排序演算法之歸併排序(關鍵詞:資料結構/演算法/排序演算法/歸併排序)
阿新 • • 發佈:2018-12-09
假定:有 1 個亂序的數列 nums ,其中有 n 個數。
要求:排好序之後是 從小到大 的順序。
歸併排序演算法
程式碼
def merge(a, b): res = [] A = 0 B = 0 while A<len(a) and B<len(b): if a[A] < b[B]: res.append(a[A]) A += 1 else: res.append(b[B]) B += 1 if A==len(a): res.extend(b[B:]) if B==len(b): res.extend(a[A:]) return res def merge_sort(nums): if len(nums)<=1: return nums mid = len(nums)//2 right_head = mid+1 return merge(merge_sort(nums[:mid+1]), merge_sort(nums[mid+1:]))
我的理解
略
原理
略
演算法複雜度
略
適用範圍
歸併排序需要大塊的額外空間(空間複雜度為 O(N)),複製陣列的元素很耗時,因此一般用於外部排序。
(資料結構 - 浙大 - P278——P279)
穩定性
略
參考文獻
- https://github.com/henry199101/sort/blob/master/merge_sort.py;
- 資料結構 - 浙大 - P276——P279;
- 資料結構(Python 語言) - Lambert - P56——P59。