希尔排序的python实现

#--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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值