希爾排序 Python實現

插入排序—希爾排序(Shell Sort)

基本思想

  • 先將序列分成較多個子序列分別進行排序,再分成較少個子序列分別進行排序,直到最後爲一個序列排序
  • 希爾排序採用每隔固定距離選取一個數的方法劃分子序。其中間隔距離稱爲增量
  • 例如:增量爲3的時候,褐色爲一個子序列,黃色爲一個子序列,灰色爲一個子序列
  • 每個子序列之間採用插入排序算法
"""
希爾排序
"""
def shell_insert_sort(a,dk):
    n = len(a)
    for k in range(dk): # 間距取dk,一共可以組成dk個子序列
        for i in range(k+dk,n,dk):#第0,dk,2dk....爲一組
            temp = a[i] # 記錄待插入的元素值
            j = i - dk # 子序列的前一個元素
            while j>=k and a[j]>temp:# 尋找插入的位置
                a[j+dk] = a[j]
                j = j - dk
            a[j+dk] = temp # 插入
        showarr(a)

def shell_sort(a):
    n = len(a)
    dk = n//2 #取第一個dk,長度的一半
    while dk>=1:
        shell_insert_sort(a,dk)
        dk = dk//2

def showarr(arr):
    n = len(arr)
    for j in range(n):
        print(arr[j],end=' ')
    print('\n')

def test():
    a = [49,38,65,97,76,13,27,49,55,4]
    shell_sort(a)

if __name__ == '__main__':
    test()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章