问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
for (int i = gap; i < arr.length; i++) 还是没想明白这个循环为什么能给数据分组??假设数组的长度为10当gap为2时这个循环需要执行8次代表着什么??
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
public static void shell1(int[]arr){
int temp=0;
//根据前面的逐步分析,使用循环处理
//增量gap,并逐步的缩小增量
for(int gap=arr.length/2;gap>0; gap/=2){
//从第gap个元素,逐个对其所在的组进行直接插入
for (int i = gap; i < arr.length; i++) {
int j=i;
temp=arr[j];
//if(arr[j]<arr[j-gap]){
while (j-gap>=0&&temp<arr[j-gap]){
//移动
arr[j]=arr[j-gap];
j-=gap;
}//当退出while循环后,就给temp找到了插入的位置
arr[j]=temp;
}
//}
}
System.out.println(Arrays.toString(arr));
}