希尔排序python实现

希尔排序python实现

希尔排序是直接插入排序的加强版,也称为减小增量排序。以从小到大排序为例进行简要分析。

算法思想

希尔排序的排序思想在先将原序列划分成若干个子序列,其中划分的依据为按照间隔gap的大小分开。至于gap的选法可以不一样,我们以gap初始值选为序列总长度的一半为例。在每个子序列之内,使用直接插入排序(插入一个数字,前一个跟后一个相比,如果后一个值比前一个值小则调换两者之间的位置)。进行完第一轮排序之后,减小gap的大小,重复上述操作。由于间隔gap的值在不断减小,也称为减小增量排序,直到gap=1的时候,也就完成了整个序列的排序。

python实现

a = [56,52,-96,-53,23,-789,520]    #测试案例
b = len(a)                         #列表长度
gap = b // 2                       #初始步长设置为总长度的一半
while gap >= 1:
    for i in range (b):
        j = i
        while j>=gap and a[j-gap] > a[j]:   #在每一组里面进行直接插入排序
            a[j],a[j-gap] = a[j-gap],a[j]
            j-= gap
    gap=gap//2                              #更新步长
print(a)
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值