import java.util.Arrays;
public class ShellSort {
public static void main(String[] args){
// 待排序数组
int[] arr = {4, 1, 3, 5, 6, 2, 7};
// 希尔排序
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void shellSort(int[] arr){
for (int inc = arr.length / 2; inc > 0; inc /= 2) { // 初始步长为数组长度一半,每次循环后步长/2
for (int i = inc; i < arr.length; i++) {
if(arr[i] < arr[i-inc]) { //
int temp = arr[i];
arr[i] = arr[i - inc];
int j = 0;
// 通过循环,逐个后移一位找到要插入的位置
for (j = i - inc; j >= 0 && temp < arr[j]; j = j - inc) {
arr[j + inc] = arr[j];
}
// 插入当前
arr[j + inc] = temp;
}
}
}
}
}