學習排序演算法4 希爾排序

2021-07-12 01:40:16 字數 770 閱讀 1963

此**需要用到我前面三個部落格的部分**(因為此處將希爾排序和選擇排序,插入排序進行了執行時間的比較)

/*希爾排序

* 思想: 是一種對插入排序的改進,因為插入排序每次交換只能交換相鄰的元素,元素挪到自己正確的位置可能需要移動很多次。

* 所以希爾排序交換不相鄰的元素,以對陣列進行區域性排序,並最終用插入排序將區域性有序的陣列排序。

*

* 具體實現是在插入排序的**中將移動元素的距離由1改為h。這樣使得陣列中任意間隔為h的元素都是有序的。然後改變h的值,再次排序。

* 直到最後h的值變為1,使得陣列完全有序。

* 時間複雜度: 達不到平方級別, 空間複雜度:不占用額外空間

* 特點: 剛開始h比較大,使得陣列部分有序,這樣很適合最後h為1進行插入排序。

* */

package paixu;

public class shell extends example

h = h/3;

} }public static void main(string args)

}

我的電腦的執行 結果如下:

由此可見,希爾排序在陣列比較大的情況下,執行效率遠遠高於選擇排序和插入排序。

有經驗的程式設計師在一些情況下,會使用希爾排序,因為它執行效率比較高,**量較小,而且不占用額外記憶體空間。

排序演算法總結 4 希爾排序

插入排序適合資料量較小或者部分有序的序列排序,但是當序列的最小值在最右端時,需要比較n 1次並且移動n 1次才能將最小數插入序列的最左端。希爾排序對直接插入排序做了改進。在插入排序的基礎上,將序列分組,利用了插入排序對資料量較小和部分有序序列高效的性質。希爾排序首先將序列以 增量 h分成h組,分組情...

排序演算法之(4) 希爾排序

希爾排序 shell sort 是d.l.shell於1959年提出來的一種排序演算法,在這之前排序演算法的時間複雜度基本都是o n2 o n 2 的,希爾排序演算法是突破這個時間複雜度的第一批演算法之一。我們前一節講的直接插入排序,應該說,它的效率在某些時候是很高的,比如,我們的記錄本身就是基本有...

排序演算法4 希爾排序(shell sort)

希爾排序是插入排序的優化版本,實現原理 將未知數組分為以gap為間隔的n個序列 gap的初值通常取需要排序數列的長度,每次排序之後取 gap 3 1 然後將這n個序列中的數進行比較,例如先對比序列1和序列2中的第乙個數字,若序列2中的第乙個小於學列1中的第乙個則更換兩個數的位置,然後比較序列2和序列...