此**需要用到我前面三個部落格的部分**(因為此處將希爾排序和選擇排序,插入排序進行了執行時間的比較)
/*希爾排序
* 思想: 是一種對插入排序的改進,因為插入排序每次交換只能交換相鄰的元素,元素挪到自己正確的位置可能需要移動很多次。
* 所以希爾排序交換不相鄰的元素,以對陣列進行區域性排序,並最終用插入排序將區域性有序的陣列排序。
*
* 具體實現是在插入排序的**中將移動元素的距離由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和序列...