关于希尔排序的问题。

问题遇到的现象和发生背景

实在没想明白 for (int i = gap; i <arr.length ; i++) {
for (int j = i-gap; j >=0; j-=gap) {
}
}分别都是用来循环什么的。如果是用来分组的,怎么实现的

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
public static void shell(int[]arr){
        int temp=0;
        //根据前面的逐步分析,使用循环处理
    for(int gap=arr.length/2;gap>0; gap/=2){
        for (int i = gap; i <arr.length ; i++) {
            for (int j = i-gap; j >=0; j-=gap) {
                if(arr[j]>arr[j+gap]){
                    temp=arr[j];
                    arr[j]=arr[j+gap];
                    arr[j+gap]=temp;
                }
            }
        }
    }


    System.out.println(Arrays.toString(arr));
}

我想要达到的结果