java資料結構之希爾排序

2021-09-16 22:17:49 字數 458 閱讀 2658

希爾排序也成為「縮小增量排序」,其基本原理是,現將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對各個子串行分別進行直接插入排序,待整個待排序列「基本有序」後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略:將相距某個「增量」的記錄組成乙個子串行,這樣才能保證在子串行內分別進行直接插入排序後得到的結果是基本有序而不是區域性有序。希爾排序是對直接插入排序演算法的優化和公升級。 

所謂的基本有序,就是小的關鍵字基本在前面,大的基本在後面,不大不小的基本在中間,例如{2,1,3,6,4,7,5,8,9,}就可以稱為基本有序了。但像{1,5,9,3,7,8,2,4,6}這樣,9在第三位,2在倒數第三位就談不上基本有序。

public static void shellsort(int arr, int left, int right)

arr[j + d] = temp;}}

}

Java資料結構之希爾排序

希爾排序借用了插入排序,演算法先將要排序的一組數按某個增量gap n 2,n為要排序數的個數 分成若干組,每組中記錄的下標相差gap.對每組中全部元素進行直接插入排序,然後再用乙個較小的增量 gap 2 對它進行分組,在每組中再進行直接插入排序。當增量減到1時,進行直接插入排序後,排序完成。clas...

java資料結構排序之希爾排序實現

早上鮮血來潮想寫個希爾排序演算法,發現發生了錯誤,一直不解,最初寫的 如下所示 static void shellsort int datalist,int dk else datalist flag temp print datalist 想呼叫它試試,卻發現 錯誤原因在於紅色 注釋處的判斷條件,...

資料結構之希爾排序

直接插入排序在資料量較小而且接近 正序 的時候,時間複雜度可以小至o n 所以如果我們能夠讓資料量變小且變得接近 正序 然後用直接插入排序就好了。希爾排序就是做這麼個事情,它首先將資料拆成幾部分,即達到縮小資料規模排序,再將資料合併起來,達到整體的 正序 然而將資料的正序並非區域性的 正序 即不是 ...