基本思想:将n个待排序的元素序列,取一个小于n的整数m作为间隔,将全部的n个元素分为m个子序列,所有距离为m的元素放在同一个子序列中,在每个子序列中分别进行直接插入排序。
public static void shellSort(int[] arr) {
int gap = arr.length/2;
//用步长控制需要循环多少次
for(int i = gap;i>0;i/=2) {
//对组内进行插入排序
for(int j=0;j<arr.length;j+=i){
int temp = arr[j];
int preIndex = j-i;
while(preIndex >= 0 && arr[preIndex] > temp) {
arr[preIndex+i] = arr[preIndex];
preIndex -= i;
}
arr[preIndex+i] = temp;
}
}
}