歸並排序(python)


歸並排序思想

  歸並排序仍然是利用完全二叉樹實現,它是建立在歸並操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。將已有序的子序列合並,得到完全有序的序列。

  基本過程:假設初始序列含有n個記錄,則可以看成是n個有序的子序列,每個子序列的長度為1,然后兩兩歸並,得到n/2個長度為2或1的有序子序列,再兩兩歸並,最終得到一個長度為n的有序序列為止,這稱為2路歸並排序。

圖解:

  這個圖非網絡復制 完全博主根據代碼執行順序手工繪制。

  

代碼:

# -*- coding:utf-8 -*-
# 歸並
l = [1, 5, 8, 1, 2, 4, 5]

# 1.遞歸拆分
# 2.分組排序
# 3.重組排序

def merge(left, right):
    result = []
    i = j = 0
    while len(left) > i and len(right)>j:
        if left[i] > right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result.extend(left[i:])
    result.extend(right[j:])
    return result

def merge_sort(l):
    if len(l) <= 1:
        return l
    moddle = len(l)/2
    left = merge_sort(l[0: moddle])
    right = merge_sort(l[moddle: len(l)])
    print 'left:', left, 'right:', right
    return merge(left, right)

if __name__ == '__main__':
    a =  merge_sort(l)
    print a
    # def test(n):
    #     print '第一個n: %s' % n
    #     if n > 4:
    #         return
    #     test(n + 1)
    #     print '第二個n: %s' % n
    # test(1)

輸出結果:

    

備注:如果不理解遞歸 先從遞歸入手,遞歸理解之后其余的就簡單了,

  另外推薦一個很好用的分步驟在線解釋器:http://www.pythontutor.com/ 完美的python在線解釋器

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM