2019-04-19:归并排序

#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,]))

猜你喜欢

转载自blog.csdn.net/sinat_18722099/article/details/89408870
今日推荐