插排之希爾排序算法

步驟

  • 將數據分成d = n//2 組,每一趟希爾排序從元素d開始,採用直接插排。

  • 每個元素的比較和插入均在同一組內進行。

  • 更新d = d//2 。

  • 直到d=0時停止,當d=1時,相當於對近乎有序的結果進行一次完整的直接插排。

圖解

圖片來源在這裏插入圖片描述

複雜度

  • 時間複雜度:
    • 最好的情況,時間複雜度O(n)O(n)
    • 最差的情況,時間複雜度(n2)(n^2)
    • 平均的情況,時間複雜度O(n1.3)O(n^{1.3})
  • 空間複雜度:O(1)O(1)

算法

def ShellSort(List):
    d = n//2
    while d>0:
        for i in range(d,len(List)):
            cur = List[i]
            pos = i-d 
            while pos >= 0 and List[pos] > cur: 
                List[pos+d] = List[pos]
                pos -= d
            List[pos+d] = cur
        d = d//2
    return List
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章