1.通过衰减成不同的增量进行部分排序移动,6,3,2,1
int [] a={9, 3, 2, 4, 10, 44, 83, 28, 22, 76, 1, 5, 0, -1,36, 35, 23};
//A0,A1,A2,A3,A4, A5, A6, A7, A8, A9, A10,A11,A12,A13
int d =a.length;
while(true){
d=d/2; //默认增量是数组长度一半 this is 6
for (int i = 0; i < d; i++) {
//循环时控制 数字下标 j加上增量 小于等于即最后一个数的下标 小于数组的长度 步长是d
for (int j = 1; j +d<a.length;j+=d) {
int tmp;//若下标小的数的值 大于 下标大的数的值 两个数交换swap
if (a[j]>a[j+d]) {
tmp=a[j];
a[j]=a[j+d];
a[j+d]=tmp;
}
}
}
//增量即步长 d若减到1时就结束while循环
if (d==1) {
break;
}
d--;
}
System.out.println(Arrays.toString(a));