【学习笔记】python版希尔排序及其时间复杂度分析

希尔排序是插入排序的一个变种,插入排序是比较步长为1,而希尔排序的比较步长则不只是1,通常情况下是一个数组,数组不同则时间复杂度不同。

来看代码:

#!/bin/python

import sys

n = len(sys.argv) - 1
gaps = [72, 36, 24, 18, 12, 9, 8, 6, 4, 3, 2, 1]

for gap in gaps:
	for i in range(gap + 1, n + 1):
		j = i
		tmp = sys.argv[i]
		while(int(tmp, 10) < int(sys.argv[j - gap], 10)):
			sys.argv[j] = sys.argv[j - gap]
			j = j - gap
			if(j <= gap):
				break
		sys.argv[j] = tmp
		print sys.argv


根据gaps数组里面的数据可确定算法的时间复杂度,以下是来自wiki的一个表格:

(链接: http://en.wikipedia.org/wiki/Shellsort )

用以上的算法对数列[4, 2, 3, 10, 1, 7, 8, 21],过程如下:

['./shell.py', '4', '2', '3', '10', '1', '7', '8', '21']
['./shell.py', '4', '2', '3', '10', '1', '7', '8', '21']
['./shell.py', '1', '2', '3', '10', '4', '7', '8', '21']
['./shell.py', '1', '2', '3', '10', '4', '7', '8', '21']
['./shell.py', '1', '2', '3', '10', '4', '7', '8', '21']
['./shell.py', '1', '2', '3', '10', '4', '7', '8', '21']
['./shell.py', '1', '2', '3', '10', '4', '7', '8', '21']
['./shell.py', '1', '2', '3', '10', '4', '7', '8', '21']
['./shell.py', '1', '2', '3', '10', '4', '7', '8', '21']
['./shell.py', '1', '2', '3', '8', '4', '7', '10', '21']
['./shell.py', '1', '2', '3', '8', '4', '7', '10', '21']
['./shell.py', '1', '2', '3', '8', '4', '7', '10', '21']
['./shell.py', '1', '2', '3', '8', '4', '7', '10', '21']
['./shell.py', '1', '2', '3', '8', '4', '7', '10', '21']
['./shell.py', '1', '2', '3', '7', '4', '8', '10', '21']
['./shell.py', '1', '2', '3', '7', '4', '8', '10', '21']
['./shell.py', '1', '2', '3', '7', '4', '8', '10', '21']
['./shell.py', '1', '2', '3', '7', '4', '8', '10', '21']
['./shell.py', '1', '2', '3', '7', '4', '8', '10', '21']
['./shell.py', '1', '2', '3', '7', '4', '8', '10', '21']
['./shell.py', '1', '2', '3', '4', '7', '8', '10', '21']
['./shell.py', '1', '2', '3', '4', '7', '8', '10', '21']
['./shell.py', '1', '2', '3', '4', '7', '8', '10', '21']
['./shell.py', '1', '2', '3', '4', '7', '8', '10', '21']


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值