希尔排序和插入排序差不多,插入排序是步长为1的希尔排序
需要看解析请看插入排序插入排序
public class ShellSort {
public static void main(String[] args) {
int[] arr = {1,3,5,6,-5,9,-6,};
shellSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void shellSort(int[] arr) {
//步长gap,步长的设置依据自己,不一定是除2
for(int gap=arr.length/2;gap>0;gap /= 2) {
for(int i=gap;i<arr.length;i++) {
int index=i;
int value=arr[i];
//while中的条件,&&两边的不等式不能交换位置
while(index-gap>=0&&value<arr[index-gap]) {
arr[index]=arr[index-gap];
index -= gap;
}
arr[index]=value;
}
}
}
}