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

插入排序思想:

  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))
归并排序

 

转载于:https://www.cnblogs.com/wdl1078390625/p/9876373.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值