来自b站视频
算法原理
希尔排序是插入排序的改进版。比较时不是以1为步长,而是以gap为步长。
把序列按下表的一定增量(gap)分组,对每组使用直接插入排序算法排序;随着增量gap的减小,减值1时全部序列被分为1组,算法终止。
需要三层循环。
第一层循环(gap):gap变化最小值为1之前插入算法执行的次数
第二层循环(j):控制的是子序列当中执行特定的插入算法的比较和交换
第三层循环(i):控制的是所有子序列中的所有元素
如图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210114141416460.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FhYWF0b25n,size_16,color_FFFFFF,t_70#pic_center)
具体实现
def shellsort(alist):
'''希尔排序'''
n = len(alist)
gap = n // 2