基本思想:
數組通過數組下標按一定增量進行分組,然後將被分組的元素進行排序(並不是只有兩個元素進行比較,而是多個),一次排序完成後再取比第一次小的增量進行排序,直到增量爲1。
圖解(這是引用百度百科的圖,增量依次爲5,3,1)
代碼實現:
public static void shellSort(int arr[]){
//這裏將初始增量爲數組長度一半(並不代表一定要這樣取值,也可以是3、4、5等),
//每循環一次增量大小減半
for(int increment = arr.length/2; increment>0; increment/=2){
//對分組結果進行直接插入排序
for(int i=increment; i<arr.length; i++){
int temp =arr[i];
int j = 0;
for(j=i-increment; j>=0; j=j-increment){
if(temp<arr[j]){
arr[j+increment] = arr[j];
}else{
break;
}
}
arr[j+increment] = temp;
}
for(int k=0; k<arr.length; k++){
System.out.print(" "+arr[k]+" ");
}
System.out.println();
}
}