//插入排序升级
public static void shellSort(int[] arr) {
//进行分组
//第一次两个一组
//第二次四个一组
for (int gap = arr.length / 2; gap > 0; gap /= 2) {
//插入排序算法
//步长为gap 即每次移动的跨度 1/2 1/2/2=1/4 1/2/2/2=1/8
//先写插入排序
for (int i = gap; i < arr.length; i++) {
int leftIndex = i - gap;//起始左下标
int temp = arr[i];
while (leftIndex >= 0 && arr[leftIndex] > temp) {
//移位
arr[leftIndex + gap] = arr[leftIndex];
leftIndex -= gap;
}
arr[leftIndex + gap] = temp;
}
}
} |
---|
![](https://img-blog.csdnimg.cn/20210310145419645.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTY5MDg2MQ==,size_16,color_FFFFFF,t_70)
参考地址: https://www.cnblogs.com/chengxiao/p/6104371.html