数据结构:希尔排序python
2021-01-20 02:15
标签:bsp 子序列 png inf 排序 插入排序 img http for循环 思路:[256,35,96,2,34,65,732,653,20] 对于一个数组,我们不再像插入排序那个把它当成两个部分, 而是引入一个gap,假设gap=4,就会有 256 34 20 35 65 96 732 2 653 分成了上面所示的4个子序列 对于这些子序列进行插入排序,即 20 34 256 35 65 96 732 2 653 这时候数组就为[20,35,96,2,34,65,732,653,256] 我们将gap减少,让gap=3 20 2 732 35 34 653 96 65 256 再分别进行插入排序 2 20 732 34 35 653 65 96 256 数组就为[2,34,65,20,35,96,732,653,256] 按照上述做法值到gap=1,这时候就是插入排序 我们先写出内部比较部分:这时候我们考虑最后一个元素它的第一次排序情况: 结果: 接下来我们整体考虑,上面这个判断情况应该是当i>0进可以继续进行下去,所以给它接上一个while循环 之后,我们将进一步考虑i的取值问题,我们发现i在跟i-gap位置上的元素进行比较,可以想到i 所以引入一个for循环,range(gap,n),其中有i=gap 这时候我们进完成了不断插入排序的过程 再考虑什么时候结束循环,由上面思路可知,gap最后应该为1,变成插入排序,所以再整体引入循环while gap>0 gap的取值问题:我们可以让它不断除以2,缩小范围,来控制整体循环次数,代码如下: 结果: 数据结构:希尔排序python 标签:bsp 子序列 png inf 排序 插入排序 img http for循环 原文地址:https://www.cnblogs.com/cong3Z/p/12904105.html#codin: utf-8
def shell_sort(alist):
n=len(alist)
gap=4
i=n-1
if alist[i]
#codin: utf-8
def shell_sort(alist):
n=len(alist)
gap=n//2
while gap>0:
for j in range(gap,n):
i=j
while i>0:
if alist[i]