基本思想:
数组通过数组下标按一定增量进行分组,然后将被分组的元素进行排序(并不是只有两个元素进行比较,而是多个),一次排序完成后再取比第一次小的增量进行排序,直到增量为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();
}
}