归并排序

归并排序是采用分治算法的典型应用。

归并排序就是讲无序队列拆分为两个小组,组内的元素先进行排序,然后组间的元素逐个比较,把小的元素依次放在新的队列中,直到队列全部有序。

归并排序的最优时间复杂度为O(nlogn),递归的时间复杂度为O(logn),最坏时间复杂度为O(nlong)

# 分组函数
def guibingsort(alist):
    n=len(alist)
    if n==0 or n==1:
        return alist
    num=n//2
    # 进行分组
    left=alist[:num]
    right=alist[num:]
    le=guibingsort(left)
    ri=guibingsort(right)
    return merge(le,ri)
# 比较函数
def merge(le,ri):
    result=[]
    if len(le)>0 and len(ri)>0:
        if le[0]<=ri[0]:
            result.append(le.pop(0))
        else:
            result.append(ri.pop(0))
    result+=le
    result+=ri
    return result
if __name__ == '__main__':
    alist=[2,32,21,54,65,21,1]
    print(guibingsort(alist))

 

posted @ 2019-01-06 18:35  名字到底要多长  阅读(153)  评论(0编辑  收藏  举报