基本说明
简单的插入排序可能存在着问题:
需要插入的数据较小时,后移的次数明显增多,对效率有影响。
所以提出了希尔排序:
一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。
图示
代码
public class ShellSort {
public static void main(String[] args) {
int[] arr = {8,9,1,7,2,3,5,4,6,0};
int num = 0;
//增量 gap 逐步减小
for (int gap = arr.length / 2; gap > 0; gap /= 2) {
//从第 gap 个元素,逐个对其所在组进行直接插入排序
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 -= gap;
}
arr[j] = temp;
}
}
System.out.println("第" + (++num) + "次排序:" + Arrays.toString(arr));
}
}
}
【结果】