1. 程式人生 > >python語言實現希爾排序

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次方)