static void sort(int []arr){
for (int gap =arr.length/2; gap> 0 ; gap/=2) {
for (int i = gap; i < arr.length; i++) {
for (int j = i; j >= gap; j -= gap) {
if (arr[j - gap] > arr[j]) {
swap(arr, j - gap, j);
}
}
}
}
}
外层for循环:每次比的都是不同的组
- i=2第一次比的是黑色组的3,1
- i=3第二次比的是蓝色组的5,6
- i=4第三次黑色1,0
- i=5第四次蓝色6,8
- …
内层for循环:从外层for开始,每次向前移动gap个,从后往前比,当 j < gap的时候就比较完毕,结束循环
例如:i=5,第四次比较蓝色的6,8
j= gap = 5
比较完成,不用交换,j=j-gap=5-2=3
j=3,j>=2,开始比较5,6
比较完成,不用交换,j=j-gap=3-2=1
j=1 不符合j>=2 跳出循环