1.定义:
希尔排序是一种插入排序算法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。Shell排序的执行时间依赖于增量序列。
2.基本结构框架原理:
将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序。
3.代码
4.代码分析:
可以参考上图进行分析,代码中increment就是一个增量,初始化等于待排序的数列数。
do while循环里,终止条件是increment不大于1时,就是增量为1就停止循环了。
第25行,先将增量赋值为increment/3+1.
for循环,从increment/3+1开始,到数列个数结束。
if语句判断遍历到当前的数和它加上增量的数哪个大,不满足的话就把数值暂存在r[0]中
r[0]起到存放数据实现数据交换的作用;
然后再用一个for循环来遍历数据,查找插入位置。
最后当增量为1时结束。
5.shell排序总结:(时间复杂度和优缺点)
shell排序的关键并不是随便分组后各自排序,而是将相隔某个“增量”的记录组成一个子序列,实现跳跃式的移动,排序效率提高;
其中时间复杂度为O[n^(3/2)],要优于直接排序的O[n^2].
但是由于增量的引入,shell排序并不是一种稳定的排序。