#--coding: utf8 --
# shell排序是插入排序的一种 -- 分组排序
# 比直接插入排序快的原因:
# 1) 刚开始的时候间隔较大, 每个组里面的数据较少,排序很快
# 2) 当分隔加大的时候, 每组的数据变多, 但是因为已经有了前面的工作,数据接近于有序, 所以也很快
def shell_sort(arr):
increment = 12
# 做N次shell排序,直到increment=1
# increment=1的时候整个数组都排好了
while increment > 1:
increment = increment / 3 + 1
shell_pass(arr, increment)
print "increment:", increment, ", arr:", arr
def shell_pass(arr, increment):
arrlen = len(arr)
# 把间隔为increment的元素作为一个子列进行排序
for i in range(increment, arrlen):
tmp = arr[i]
k = i
while k >= increment and arr[k - increment] > tmp:
arr[k] = arr[k - increment]
k -= increment
arr[k] = tmp
arr = [3,9,8,4,5,2,10,18,4]
shell_sort(arr)
print arr
转载于:https://my.oschina.net/jamesxu/blog/15190