1. 程式人生 > >排序演算法之歸併排序(關鍵詞:資料結構/演算法/排序演算法/歸併排序)

排序演算法之歸併排序(關鍵詞:資料結構/演算法/排序演算法/歸併排序)

假定:有 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)

穩定性

參考文獻

  1. https://github.com/henry199101/sort/blob/master/merge_sort.py;
  2. 資料結構 - 浙大 - P276——P279;
  3. 資料結構(Python 語言) - Lambert - P56——P59。