一、原理
在插入排序基礎上,在一個list中,每次遞減劃分步長,選擇組的隊員進行比較,索引位置不變,value值交換大小,數據朝着局部有序的方向發展。
剛開始時候雖然分組比較多,但每組數據很少,組數減小後每組數據多但基本有序,而插入排序對已經基本有序的數組排序效率較高。
二、實現代碼
public void shellSort(int[] array) {
int j;
for(int gap = array.length/2; gap>0; gap /= 2){
//定義一個增長序列,即分割數組的增量,d1=N/2 dk=(d(k-1))/2 gap是步長
for(int i = gap; i<array.length;i++){
int tmp = array[i];
for( j =i; j>=gap && tmp<array[j-gap]; j -= gap){
//將相距爲Dk的元素進行排序
array[j] = array[j-gap];
}
array[j] = tmp;
}
}
}
三、時間複雜度