增量序列的第一个增量是数组length 除以 2 ,后面的增量是前一个增量除以2。
import java.util.Arrays;
public class Main {
public static void sheelSort(int[] arr) {
for(int interval = arr.length / 2;interval > 0;interval /= 2 ) {//枚举增量,不断缩小
//增量为 interval 的插入排序
for(int i = interval;i < arr.length;i++) {//将每个arr[i]往自己组里插
int target = arr[i];
int j = i - interval;
while(j > -1 && target < arr[j]) {
arr[j + interval] = arr[j];
j -= interval;
}
arr[j + interval] = target;
}
}
}
public static void main(String[] args) {
int[] arr = {1,0,2,9,3,8,4,6,5,8,7};
sheelSort(arr);
System.out.println(Arrays.toString(arr));
}
}