歸併排序和希爾排序

2021-07-03 08:53:06 字數 962 閱讀 1021

一、歸併排序

歸併排序的時間複雜度為o(nlogn) 這是該演算法中最好、最壞和平均的時間效能。

其中比較操作的次數介於(nlogn) / 2和nlogn - n + 1(在每次歸併中比較次數不一樣)。

賦值操作的次數是(2nlogn)。歸併演算法的空間複雜度為:0 (n)

歸併排序比較占用記憶體,但卻是一種效率高且穩定的演算法。

程式設計中注意,很多人寫的函式中都建立了許多區域性陣列碎片,這增加了記憶體。使用類成員陣列來儲存歸併後臨時陣列,才可以真正達到o(n)的空間複雜度。

**如下:

package sort;

public class mergesort

public void merges(int a,int begin,int end)else

} while(left<=middle)

while(right<=end)

//將臨時陣列排好序的數複製回原陣列中

while(begin<=end)

} public static void main(string args);

mergesort ms=new mergesort(a);

ms.merges(a, 0, a.length-1);

for(int i=0;i

注意:間隔序列中數字互質很重要。

貼**:

package sort;

public class shellsort ;

private static final int b=;

public static void shellsort(){

int size=a.length;

for(int i=0;i<3;i++){

//這不就是直接插入排序嘛

for(int j=0;j=j&&temp

歸併排序和希爾排序

歸併排序是一種分治演算法,把大的問題分成乙個個小部分去處理,最終解決大問題。假設有兩個陣列a,b,每個陣列都是從小到大排好序的,如果要將這兩個陣列合併成乙個陣列,並且從小到大排好序 那麼只需要從頭比較,依次將a,b中較小的值放入新的陣列。對於乙個無序的陣列,也可以通過這種方法排序,將陣列從中間分成2...

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

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

希爾排序 堆排序 歸併排序

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