码迷,mamicode.com
首页 > 编程语言 > 详细

007---归并排序

时间:2019-01-16 19:21:28      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:执行   while   列表   def   color   bsp   UNC   []   --   

归并排序

原理:
前提是必须确保这个列表左右两边有序
例如:[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---归并排序

标签:执行   while   列表   def   color   bsp   UNC   []   --   

原文地址:https://www.cnblogs.com/xjmlove/p/10278451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!