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,取出第二个,后面依次类推

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