来自b站视频
算法原理
希尔排序是插入排序的改进版。比较时不是以1为步长,而是以gap为步长。
把序列按下表的一定增量(gap)分组,对每组使用直接插入排序算法排序;随着增量gap的减小,减值1时全部序列被分为1组,算法终止。
需要三层循环。
第一层循环(gap):gap变化最小值为1之前插入算法执行的次数
第二层循环(j):控制的是子序列当中执行特定的插入算法的比较和交换
第三层循环(i):控制的是所有子序列中的所有元素
如图所示
具体实现
def shellsort(alist):
'''希尔排序'''
n = len(alist)
gap = n // 2 # 步长
while gap >=