希尔排序
希尔排序(shell sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高级的改进版本。
希尔排序是非稳定排序算法。该方法因DL.shell于1959年提出而得名。
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐步减少,每组包含的竿见次越来愈多,当增量减至1时,整个文件恰被分成一组,算法便终止。
基本思想:将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列来进行。最后整个表中只有一列了。
代码如下:
def shell_sort(alist):
n = len(alist)
gap = n // 2
#gap为步长,将以步长为间隔的每两个数做比较
while gap > 0:
for i in range(gap,n):
while i > 0:
if alist[i] < alist[i-gap]:
alist[i], alist[i-gap] = alist[i-gap], alist[i]
i -= 1
else:
break
gap //= 2
if __name__ == '__main__':
list = [23,44,30,24,6,3,9,7,66]
shell_sort(list)
print(list)
运行结果:
[3, 6, 7, 9, 23, 24, 30, 44, 66]