python3排序算法,快速排序算法python代码
归并排序动态图如下:
归并排序的思路就是分治的思想,具体思路如下:
1、将一串数分为两部分,对两部分分别排序,然后将两部分已经有序的数再合到一起
2、对一中分成的每一部分,递归的进行上述一的操作具体代码实现如下:
定义合并排序(数据):
如果len(数据)=1:
返回数据
mid=len(datas)//2
left=merge_sort(datas[:mid])
right=merge_sort(datas[mid:])
返回合并(左,右)
定义合并(左、右):
数据=[]
i=0
j=0
而我len(左)和j len(右):
if left[i] right[j]:
数据追加(左[我])
i=1
否则:
数据追加(右[j])
j=1
如果我借(左):
对于范围内的索引(我,兰(左)):
数据追加(左[索引])
如果j len(右):
对于范围内的索引(j,len(右)):
数据追加(右[索引])
打印(-)
打印(左:,左)
打印(右:,右)
打印("数据:",数据)
打印(-)
返回数据
if __name__==__main__ :
数据=[10,9,8,7,6,5,4,3,2,1,0]
datas=merge_sort(数据)
打印(经过归并排序后结果:,数据)执行结果如下:
-
左:[10]
右:[9]
数据:[9,10]
-
-
左:[7]
右:[6]
数据:[6,7]
-
-
左:[8]
右:[6,7]
数据:[6,7,8]
-
-
左:[9,10]
右:[6,7,8]
数据:[6,7,8,9,10]
-
-
左:[4]
右:[3]
数据:[3,4]
-
-
左:[5]
右:[3,4]
数据:[3,4,5]
-
-
左:[1]
右:[0]
数据:[0,1]
-
-
左:[2]
右:[0,1]
数据:[0,1,2]
-
-
左:[3,4,5]
右:[0,1,2]
数据:[0,1,2,3,4,5]
-
-
左:[6,7,8,9,10]
右:[0,1,2,3,4,5]
数据:[0,1,2,3,4,5,6,7,8,9,10]
-
经过归并排序后结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]最好的情况下
定义合并排序(数据):
如果len(数据)=1:
返回数据
mid=len(datas)//2
left=merge_sort(datas[:mid])
right=merge_sort(datas[mid:])
返回合并(左,右)
定义合并(左、右):
数据=[]
i=0
j=0
而我len(左)和j len(右):
if left[i] right[j]:
数据追加(左[我])
i=1
否则:
数据追加(右[j])
j=1
如果我借(左):
对于范围内的索引(我,兰(左)):
数据追加(左[索引])
如果j len(右):
对于范围内的索引(j,len(右)):
数据追加(右[索引])
打印(-)
打印(左:,左)
打印(右:,右)
打印("数据:",数据)
打印(-)
返回数据
if __name__==__main__ :
数据=[0,1,2,3,4,5,6,7,8,9,10]
datas=merge_sort(数据)
打印(经过归并排序后结果:,数据)执行结果如下:
-
左侧:[0]
右:[1]
数据:[0,1]
-
-
左:[3]
右:[4]
数据:[3,4]
-
-
左:[2]
右:[3,4]
数据:[2,3,4]
-
-
左:[0,1]
右:[2,3,4]
数据:[0,1,2,3,4]
-
-
左:[6]
右:[7]
数据:[6,7]
-
-
左:[5]
右:[6,7]
数据:[5,6,7]
-
-
左:[9]
右:[10]
数据:[9,10]
-
-
左:[8]
右:[9,10]
数据:[8,9,10]
-
-
左:[5,6,7]
右:[8,9,10]
数据:[5,6,7,8,9,10]
-
-
左:[0,1,2,3,4]
右:[5,6,7,8,9,10]
数据:[0,1,2,3,4,5,6,7,8,9,10]
-
经过归并排序后结果: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。