Python 希尔排序

来源:互联网 发布:在access数据库中 表是 编辑:程序博客网 时间:2024/05/29 15:20

基本思想

设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
原创粉丝点击