歸併排序和希爾排序

2021-09-21 14:28:19 字數 986 閱讀 2790

歸併排序是一種分治演算法,把大的問題分成乙個個小部分去處理,最終解決大問題。

假設有兩個陣列a,b,每個陣列都是從小到大排好序的,如果要將這兩個陣列合併成乙個陣列,並且從小到大排好序

那麼只需要從頭比較,依次將a,b中較小的值放入新的陣列。

對於乙個無序的陣列,也可以通過這種方法排序,將陣列從中間分成2部分,但是大概率是兩個無序陣列,然後接著對

分開的兩部分再分,直到每部分都是只有乙個數,顯然每部分都是有序的了。如下圖:

然後對最下一層兩兩比較,例如80  30   得到新的序列  [30,80]                       60   20  得到新的序列[20,60]

然後在對新序列[30,80]和[20,60]進行合併, 從頭比較得到新的序列[20,30,60,80]         同理可得 右邊的序列[10,50,60,70]     

最後對[20,30,60,80] 和 [10,50,60,70]   進行合併,先建立乙個新陣列,長度等於兩個陣列長度的和,然後開始比較:

10比20小,先將10存入; 將20和50比較,20小,將20存入;將50和30比較,30小,將30存入;50和60比較,50小,將50存入;60和60比較,將前面乙個陣列的60存入;然後接著60和80比較,60小,60存入新陣列;80和70比較,70小,存入70,後面乙個陣列到頭了的話,就把另乙個陣列的所有資料插入到新陣列的末端;所有資料就被排好序了。

如圖:

//第一步通過遞迴分

public static void mergesort(int arr,int low,int high)

else break;}}

}}

歸併排序和希爾排序

一 歸併排序 歸併排序的時間複雜度為o nlogn 這是該演算法中最好 最壞和平均的時間效能。其中比較操作的次數介於 nlogn 2和nlogn n 1 在每次歸併中比較次數不一樣 賦值操作的次數是 2nlogn 歸併演算法的空間複雜度為 0 n 歸併排序比較占用記憶體,但卻是一種效率高且穩定的演算...

希爾排序,堆排序,歸併排序

思想 1 在直接插入排序的思想上,如果先使陣列盡可能有序,則就可使時間複雜度趨近o n 因此,演算法也集中在使陣列有序。首先用分組的方法將陣列分組,這裡舉例假設陣列有11個數,我們可以分為3個為1組,再1個為1組。2 給定乙個陣列分組的寬度,則外層迴圈就可直接從i 0 width開始,並用tmp儲存...

希爾排序 堆排序 歸併排序

希爾排序 by donald shell 利用了插入排序的簡單 同時克服 插入排序以此交換消去乙個 逆序對的困難.既然我們 決定 要 做上述之事 那麼我們 最迫切的事情就是 確定我們以此交換 間隔幾個位置?假定給了乙個需要排序的陣列並且 按照5 間隔的方式進行排序 附圖如下 我們 慢慢的按照 越來越...