简单插入排序存在的问题
- 假如数组arr={2,3,4,5,6,1},这时需要插入的数为1,这样的过程是
- {2,3,4,5,6,6}
- {2,3,4,5,5,6}
- {2,3,4,4,5,6}
- {2,3,3,4,5,6}
- {2,2,3,4,5,6}
- {1,2,3,4,5,6}
- 结论:当需要排序的数为倒序,而我们需要正序排序的时候,效率很低。
希尔排序法介绍
-
希尔排序是希尔(DonaldShell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改造之后的一个更高效的版本,也称为缩小增量排序。
-
希尔排序没有快速排序算法快 O(n(logn)),因此中等大小规模数据表现良好,对规模非常大的数据排序不是最优选择。
-
希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,而快速排序在最坏的情况下执行的效率会非常差。
希尔排序法基本思想
- 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件刚好被分成一组,算法终止。
排序思想图解
代码实现
public class DonaldShell {
private