007---归并排序
Posted xjmlove
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了007---归并排序相关的知识,希望对你有一定的参考价值。
归并排序
原理:
前提是必须确保这个列表左右两边有序
例如:[2,5,7,8,9,1,3,4,6]
以9为中心
2 和 1比较 [].append(1)
2 和 3比较 [1].append(2)
3 和 5比较 [1,2].append(3)
.
.
.
最后得到新列表:[1,2,3,4,5,6,7,8,9]
去除假设:利用递归。分解,合并,归并一步完成
复杂度: O(NlogN) 当n等于16层时,他一共要执行4次func() 每一个func就是O(n) 所以就是 N * logN
"""
1 def merge(li, low, mid, high): 2 i = low 3 j = mid + 1 4 tmp = [] 5 while i <= mid and j <= high: 6 if li[i] < li[j]: 7 tmp.append(li[i]) 8 i += 1 9 else: 10 tmp.append(li[j]) 11 j += 1 12 13 # while执行完毕后,肯定有一边先没数了 14 while i <= mid: 15 # 左边还有数,加到[] 16 tmp.append(li[i]) 17 i += 1 18 while j <= high: 19 # 右边还有数,加到[] 20 tmp.append(li[j]) 21 j += 1 22 li[low:high + 1] = tmp 23 24 def merge_sort(li, low, high): 25 # 至少有两个元素 26 if low < high: 27 mid = (low + high) // 2 28 merge_sort(li, low, mid) 29 print(low,mid,high) 30 merge_sort(li, mid + 1, high) 31 merge(li, low, mid, high) 32 33 li = [2, 5, 7, 8, 9, 1, 3, 4, 6] 34 35 merge_sort(li, 0, 8) 36 print(li)
以上是关于007---归并排序的主要内容,如果未能解决你的问题,请参考以下文章