排序系列03 歸併排序

2022-04-10 13:12:25 字數 589 閱讀 8475

在談歸併排序之前,我們先討論下分治法

分治法的核心就是把大問題拆分成小問題。乙個屬於領導的演算法。。。

歸併排序:將問題分成多個 然後解決後合併

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 的陣列遞迴排序 將兩部分陣...