数据结构:希尔排序python

2021-01-20 02:15

阅读:740

标签: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,这时候就是插入排序

我们先写出内部比较部分:这时候我们考虑最后一个元素它的第一次排序情况:

#codin: utf-8

def shell_sort(alist):
    n=len(alist)
    gap=4
    i=n-1
    if alist[i]

  结果:技术图片

 

 接下来我们整体考虑,上面这个判断情况应该是当i>0进可以继续进行下去,所以给它接上一个while循环

之后,我们将进一步考虑i的取值问题,我们发现i在跟i-gap位置上的元素进行比较,可以想到i

所以引入一个for循环,range(gap,n),其中有i=gap

这时候我们进完成了不断插入排序的过程

再考虑什么时候结束循环,由上面思路可知,gap最后应该为1,变成插入排序,所以再整体引入循环while gap>0

gap的取值问题:我们可以让它不断除以2,缩小范围,来控制整体循环次数,代码如下:

#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]

  结果:技术图片

 

数据结构:希尔排序python

标签:bsp   子序列   png   inf   排序   插入排序   img   http   for循环   

原文地址:https://www.cnblogs.com/cong3Z/p/12904105.html


评论


亲,登录后才可以留言!