#encoding=utf-8
"""
归并算法:
首先归并排序使用了二分法,归根到底的思想还是分而治之。
拿到一个长数组,将其不停的分为左边和右边两份,然后以此递归分下去。
然后再将她们按照两个有序数组的样子合并起来
"""
#合并的方法
def merge(list_a,list_b):
m,n=0,0
result=[]
while m<len(list_a) and n<len(list_b):
if list_a[m]<list_b[n]:#将两个要合并的列表中的元素逐一进行比较
result.append(list_a[m])#小的添加在结果中
m+=1#角标加1
else:
result.append(list_b[n])
n+=1#角标加1
if m ==len(list_a):
result=result+list_b[n:]#列表list_a的都比较过了,只剩下list_b中的列表数字了,直接加载结果上
else:
result=result+list_a[m:]
return result
#拆分的递归函数
def merge_sort(arr):
if len(arr)==1:
return arr
mid = len(arr) // 2
print("**:", arr[:mid], arr[mid:])
left=merge_sort(arr[:mid])#左树会一直往下分,分到
right = merge_sort(arr[mid:])
return merge(left,right)
print(merge_sort([-5,-1,-6,8,9,1,]))
2019-04-19:归并排序
猜你喜欢
转载自blog.csdn.net/sinat_18722099/article/details/89408870
今日推荐
周排行