希尔排序
时间复杂度O(nlog n)空间复杂度O(1)
思路:希尔排序是对插入排序的优化,将数组分为若干组,每次只进行组内排序。相当于分组+插入
public static void shellSort1(int[] ints){
int n = ints.length;
for (int gap = n / 2; gap > 0; gap /= 2) {//分组,最小为1即可,为1就相当于不分组的插入排序了,gap为组数
for (int i = gap; i < n; i+=gap) {//从每组第二个开始作为无序数组的开始节点,进行组内插入
int indexValue = ints[i];//记录对应的值
int j = i - gap;
//开始排序
//将大于需要插入的数逐渐后移
while (j >=0 && ints[j] >indexValue){
ints[j + gap] = ints[j];
j -= gap;
}
//最终j + gap就是indexVal的位置
//判断是否要赋值
if(j != i - gap){
ints[j + gap] = indexValue;
}
}
System.out.println(Arrays.toString(ints));
}
}