# 把待排序序列分为若干个子序列,将子序列排序后,再把有序子序列合并为整体有序序列。
# 采用分治思想(diveide and conquer)是一种典型的递归排序方法。
# 基本原理(升序):
# 1.分:利用递归将序列不断二分,最终形成单元素序列
# 2.治:将序列进行排序后组合
# 3.不断递归形成最终序列
# 实现过程:利用中间值将序列不断分解,分解后进行排序,排序时将子序列合并排序,并将排序结果存入新序列
# 参考:
# https://blog.csdn.net/rytyy/article/details/78720562;
# https://blog.csdn.net/su_bao/article/details/81053871
import random
def divide(list):
if len(list)<=1:
return list
else:
mid = len(list)//2
left = divide(list[:mid])
right = divide(list[mid:])
return conquer(left,right)
def conquer(list_left, list_right):
final = []
a,b = 0,0
while a<len(list_left) and b<len(list_right):
if list_left[a] < list_right[b]:
final.append(list_left[a])
a += 1
else:
final.append(list_right[b])
b += 1
final += list_left[a:]
final += list_right[b:]
return final
if __name__ == '__main__':
Range = 100
Length = 5
list = random.sample(range(Range), Length) # 在指定序列中随机获取指定长度片段
print('before sort:', list)
list = divide(list)
print('after sort:',list)
python算法9.9——归并排序
猜你喜欢
转载自blog.csdn.net/nominior/article/details/82563516
今日推荐
周排行