希爾排序思想:
希爾排序其實就是將乙個陣列分段進行插入排序,最後再將分段序列組合在一起進行大的插入排序。
也即:希爾排序是首先將陣列分成若干子陣列(一般子陣列的個數是n/2或者n/m,n是陣列長度,m是分隔間距),然後每個子陣列進行插入排序;再縮減增量(一般縮減增量表示式是 k/2,k是上一次執行插入排序結束之後的子陣列的長度),進行插入排序;直到子陣列足夠小,那麼再對總的陣列進行插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。
以n=10的乙個陣列49, 38, 65, 97, 26, 13, 27, 49, 55, 4為例
第一次 gap = 10 / 2 = 5
49 38 65 97 26 13 27 49 55 4
1a 1b
2a 2b
3a 3b
4a 4b
5a 5b
第二次 gap = 5 / 2 = 2
排序後13 27 49 55 4 49 38 65 97 26
1a 1b 1c 1d 1e
2a 2b 2c 2d 2e
第三次 gap = 2 / 2 = 1
4 26 13 27 38 49 49 55 97 65
1a 1b 1c 1d 1e 1f 1g 1h 1i 1j
第四次 gap = 1 / 2 = 0 排序完成得到陣列:
4 13 26 27 38 49 49 55 65 97
**實現是:
public static void shellsort(int arr)
arr[k + gap] = temp;}}
}} }
測試**:
public static void main(string args) ;
shellsort(arr);
for(int i : arr)
}
排序演算法之希爾排序 java實現
希爾排序 在直接插入排序的基礎上進行的優化,直接插入排序在n值小的時候效率比較高,在n很大的時候如果待排序序列基本有序,效率依然很高,時間效率可以提公升為o n 希爾排序也稱之為縮小增量排序。1.先選取乙個小於n的整數d 步長 然後按照步長d將待排序序列分為d組,從第乙個記錄開始間隔為d的為乙個組。...
希爾排序 java實現
先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄 基本有序 時,再對全體記錄進行依次直接插入排序。操作方法 選擇乙個增量序列t1,t2,tk,其中ti tj,tk 1 按增量序列個數k,對序列進行k 趟排序 每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m...
希爾排序 Java實現
希爾排序實際上是針對插入排序的一種優化演算法。當被插入的元素要移動到陣列的開始位置時需要比較的次數相當大,通過改變相鄰的元素比較為距離間隔為h的元素比較 h逐漸減小為1 就能減少比較的次數。如下 public class tester shellsort t for int a t 將陣列中下標為i...