插入排序的问题
下图来自尚学堂课程视频截图
基本思想
希尔排序也是一种插入排序,是插入排序的缩小增量版本
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,
每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止
上学堂的这个图片示例很有助于理解,放这里
代码实现
public static void shellSort2(int[] arr){
//增量gap,并逐步缩小增量
for (int gap = arr.length/2;gap>0;gap/=2){
for (int i = gap;i<arr.length;i++){
int j = i;
int temp = arr[j];
if (arr[j]<arr[j-gap]){
while (j-gap>=0&&temp<arr[j-gap]){
//移动
arr[j] = arr[j-gap];
j = j-gap;
}
//当退出while后,就给temp找到插入的位置
arr[j] = temp;
}
}
//System.out.println(Arrays.toString(arr));
}
}