shell排序

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排序并不是一种稳定的排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值