//希尔排序
public class MyDemo042 {
public static void main(String [] args) {
int [] arr = {8,4,2,1,23,344,12};
//分组插入
//首先计算步长 arr.length/2; 3 [8,1,12] [4,23] [2,344]
//分组排序[1,8,12] [4,23] [2,344] ==> [1,4,2,8,23,344,12]
//重新计算步长 原步长/2 1 ==>
//计算步长 每次步长缩短一半 直到步长为1 就结束
for (int jump=arr.length/2;jump>0;jump/=2) {
//从每组第二个数开始 //多少组取决于步长
for (int i=jump;i<arr.length;i++) {
//取出每组第二个数
int value = arr[i];
//循环 小组中排序数据
int j= i-jump;
while (j >=0 && value > arr[j]) {
arr[j+jump] = arr[j];
j-=jump;
}
arr[j+jump]=value;
}
}
for (int i=0; i<arr.length;i++) {
System.out.print(arr[i]+"-----");
}
}
}