public class Shell {
/**
希尔排序类似于插入排序
只是在进行插入排序之前先进行了分组
*/
static void sort(int[] arr){
int h = 1;
while(h < arr.length/2){
h = h*2 + 1; //确定初始增长量
}
while (h >= 1){
//进行排序
for (int i = h; i < arr.length; i++) {//第一个待插入的数字刚好就是索引为h的数
for (int j = i; j >= h ; j -= h) {//将待插入的数字 依次往前与同一组数据进行比较
if(arr[j] < arr[j-h]){
int tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}else{
break;
}
}
}
h = h/2; //减小增长量
}
}
}