在談歸併排序之前,我們先討論下分治法
分治法的核心就是把大問題拆分成小問題。乙個屬於領導的演算法。。。
歸併排序:將問題分成多個 然後解決後合併
def mergesort(lists):
if len(lists) <= 1:
return lists
num = int( len(lists)/2 )
left = mergesort(lists[:num])
right = mergesort(lists[num:])
return merge(left, right)
def merge(left,right):
r, l=0, 0
result=
while l說白了歸併排序分成兩步,拆分和合併
合併:我們想象有兩個有序的陣列 我們如何把他們排序呢 [1,3,5,6] ,[2,4,9,10] 過程應該是 1-2比較 2-3比較 3-5。。。。 這樣複雜度就是o(n)
拆分:1 -2 -4-8 我們知道這裡的問題每次都會隨著迭代次數/2 所以這裡的複雜度是o(log n)
因此歸併排序的複雜度為 o(n log n)
03 歸併排序
在電腦科學中,分治法是一種很重要的演算法。字面上的解釋是 分而治之 就是把一乙個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題.直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。分治法在每 層遞迴上都有三個步驟 分解 將原問題分解為若干個規模較小,相互獨立,與...
排序系列六 歸併排序
這個排序有點費腦子,大家還得花時間好好看看 歸併排序原理如下圖所示 如下 歸併排序 mergesort 建立在歸併操作上的採用分治法的一種有效的排序演算法,將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。一般來說從單個...
演算法熟記 排序系列 歸併排序
1.簡述 假設待排序陣列為 int array,陣列長度為n。歸併排序是乙個遞迴得方法。當n 1時,停止遞迴。當n 1時,開闢乙個與array同樣大小得陣列,int tmp 將array 0 array n 2 得陣列遞迴排序,將array n 2 1 array n 1 的陣列遞迴排序 將兩部分陣...