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

插入排序、分治法、归并排序

时间:2018-10-30 14:42:39      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:归并排序   src   分治法   span   play   turn   解决   技术   nbsp   

插入排序思想:

  1.先从一串元素中随机取出一个元素,置于数组A中;其他元素置于数组B中;

  2.遍历数组B中的每一个元素,将每个元素以正确的顺序置入数组B中。

插入排序算法时间复杂度:Θ(n2)


分治法思想:

  1.分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。

  2.解决这些子问题,递归求解各子问题。若子问题的规模足够小,则直接求解。

  3.合并这些子问题的解成原问题的解。

 

 

归并排序思想(基于分治法):

  1.将一串元素分为两半,分别存储于数组A及数组B中;

  2.对数组A及数组B重复第一步,直至所得数组的元素个数为1;

  3.对所得数组往上递归排序。

归并排序算法时间复杂度:Θ(nlgn)

技术分享图片
 1 import random
 2 
 3 
 4 def main(args):
 5     a = []
 6     for i in range(10):
 7         a.append(random.randint(1,100))
 8     print(a)
 9     merge_sort(a,0,len(a)-1)
10     print(a)
11     return 0
12     
13 def merge(a,n,m):
14     r = ( n + m )// 2
15     b = []
16     c = []
17     for i in range(n,r+1):
18         b.append(a[i])
19     for i in range(r+1,m+1):
20         c.append(a[i])
21     i = 0
22     j = 0
23     index_a = n
24     while len(b) > i and len(c) > j:
25         if b[i] >= c[j]:
26             a[index_a] = b[i]
27             i += 1
28         else:
29             a[index_a] = c[j]
30             j += 1
31         index_a += 1
32     else:
33         if len(b) == i:
34             for k in range(j,len(c)):
35                 a[index_a] = c[k]
36                 index_a += 1
37         else:
38             for k in range(i,len(b)):
39                 a[index_a] = b[k]
40                 index_a += 1
41     
42 def merge_sort(a,n,m):
43     if n < m:
44         merge_sort(a,n,((n+m)//2))
45         merge_sort(a,((n+m)//2)+1,m)
46         merge(a,n,m)
47     
48     
49 if __name__ == __main__:
50     import sys
51     sys.exit(main(sys.argv))
归并排序

 

插入排序、分治法、归并排序

标签:归并排序   src   分治法   span   play   turn   解决   技术   nbsp   

原文地址:https://www.cnblogs.com/wdl1078390625/p/9876373.html

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