python 排序(三)歸併排序

一、介紹

歸併排序與快速排序都是利用了分治的策略

基本原理與思想:

1、將一個序列從中間位置分成兩個序列

2、將兩個子序列重複第一步的操作,直到所有子序列長度爲一

3、將所有子序列進行歸併,每兩個序列比較第一個元素的大小,將小的拿出來

二、代碼實現

def merger(a, b):
    c = []
    h = j = 0
    while j < len(a) and h < len(b):
        if a[j] < b[h]:
            c.append(a[j])
            j += 1
        else:
            c.append(b[h])
            h += 1
    if j == len(a):
        for i in b[h:]:
            c.append(i)
    else:
        for i in a[j:]:
            c.append(i)
    return c

def merger_sort(lis):
    #print lis
    if len(lis) <= 1:
        return lis
    mid = len(lis) // 2
    left_lis = merger_sort(lis[:mid])
    right_lis = merger_sort(lis[mid:])
    return merger(left_lis, right_lis)



if __name__ == '__main__':
    lis = [14, 2, 34, 43, 21, 19,14,33,25,64,11,13]
    print merger_sort(lis)
    

三、總結

穩定性:穩定,因爲每次排序的過程都是一樣的

時間複雜度:O(nlongn)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章