python语言实现希尔排序

希尔排序:

  以下为举例说明希尔排序用法

  54,26, 93,17,77,31,44,55,20

取gap为4:从54开始作为第一个,加4取出第二个

54              77                  20                                         20                         54                                     77

     26               31                                                              26                          31

          93                 44                                                             44                         93

              17                    55                                                            17                           55

把每一行看作一个独立新序列,每一行的序列进行插入排序,插入排序结束后,在以原间距位置组合成一个序列

20,26,44,17,54,31,93,55,77

再缩小gap,gap=2,以20为开始,加2,取出第二个,后面依次类推

扫描二维码关注公众号,回复: 4782603 查看本文章

20            44            54          93       77                 20       44      54        77        93

     26               17           31         55                            17       26      31       55 

把每一行看作一个独立新序列,每一行的序列进行插入排序,插入排序结束后,在以原间距位置组合成一个序列

20 17 44 26 54 31  77 55  93

再次缩小,gap=1,以20为开始,加1,取出第二个,后面依次类推(因为间隔为一相当于为一个序列,直接进行插入排序)

17 20 26 31 44 54 55 77 93

python实现希尔排序的代码如下:

# coding:utf-8

def shell_sort(alist):
    """希尔排序"""
    n = len(alist)
    #python2中去整数除法用/,python3中去整数除法用/ /
    gap = n//2
    while gap > 0:
        for j in range(gap,n):
            i = j
            while i > 0:
                if alist[i] < alist[i - gap]:
                    alist[i], alist[i - gap] = alist[i - gap], alist[i]
                    i = i - gap
                else:
                    break
        gap = gap//2



if __name__ =="__main__":
    li = [54,26,93,17,77,31,44,55,20]
    print(li)
    shell_sort(li)
    print(li)

希尔排序的最优时间复杂度:不确定

                  最坏时间复杂度:O(n的2次方)

        

猜你喜欢

转载自blog.csdn.net/wangshuai33/article/details/84548480
今日推荐