歸並排序思想
歸並排序仍然是利用完全二叉樹實現,它是建立在歸並操作上的一種有效的排序算法,該算法是采用分治法(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在線解釋器