Python 希尔排序

基本思想

设a=[9, 8, 7, 6, 5, 4, 3, 2, 1],若要用直接插入排序,元素移动的次数很多,希尔排序是针对直接插入排序的改进。

1. 选择一个初始步长 d(一般取 n/2,自定义),将序列中相隔d的元素进行排序

2. 新步长 d = d / 2(步长d的选取有不同规定,有的是 d/2,有的是 d/2 的基础上只取奇数,偶数就+1),依然将序列中相隔d的元素进行排序,直到 d = 1,此时的排序已经是直接插入排序了。


示意图如下,初始步长为 n/2,后面的步长在 n/2 的基础上采用奇数:



Python实现

def shellSort(a):
# 希尔排序: 小->大
# 对d的选取各有规定,本文以d/2为例
    n = len(a)
    d = n / 2
    while d > 0:
        for i in xrange(d, n):
            index = a[i]
            j = i - d
            while j >= 0 and a[j] > index:
                a[j + d] = a[j]
                j -= d
            a[j + d] = index
        d = d / 2
    return a

效率

与步长的选取有关

O(n1+),0<£<1


参考资料

http://blog.csdn.net/hguisu/article/details/7776068

http://www.cnblogs.com/xkfz007/archive/2012/07/01/2572017.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值