private static void swap2(int []arr,int a,int b){
int av = arr[a];
arr[a] = arr[b];
arr[b] = av;
}
private static void test(int arr[]){
for (int gap = arr.length/2;gap>0;gap = gap/2){
for (int i=gap;i<arr.length;i++){
int j=i;
while (j-gap >=0 && arr[j] < arr[j-gap]){
swap2(arr,j,j-gap);
j = j-gap;
}
}
}
}
public static void main(String []args){
int[] arr1 = new int[]{1,4,2,7,9,8,3,6,0,-1};
test(arr1);
System.out.println(Arrays.toString(arr1));
}
第一次 j和k跨度5执行步骤
第二次 j和k跨度2执行步骤
第三次 j和k跨度1执行步骤