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