排序原理
1、选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组。
2、对分好组的每一组数据完成插入排序。
3、减小增长量,最小减为1,重复第二步操作。
增长量h的确定:增长量h的值每一固定的规则,采用以下规则:
int h =1;
while(h<数组的长度/2){
h = 2h +1;
}
//循环结束后就可以确定h的最大值
//h的减小规则为:
h =h/2
代码示例
public static void main(String[] args) {
int[] arr = {2,5,4,6,11,32,3,8,21,14,26};
//根据数组长度,计算得到h的初始值
int h =1;
while (h<arr.length/2){
h = 2*h +1;
}
while (h>=1){
for (int i=h;i<arr.length;i++){
for (int j = i;j> h; j -= h){
if (arr[j-h] > arr[j]){
int temp = arr[j];
arr[j] = arr[j-h];
arr[j-h] = temp;
}else {
break;
}
}
}
h = h/2;
}
System.out.println(Arrays.toString(arr));
}