1. 程式人生 > 其它 >排序篇(python)—希爾排序

排序篇(python)—希爾排序

技術標籤:資料結構和常見演算法題python演算法排序演算法

希爾排序


1959年Shell發明,第一個突破O(n2)的排序演算法,是簡單插入排序的改進版。它與插入排序的不同之處在於,它會優先比較距離較遠的元素。希爾排序又叫縮小增量排序。

描述

先將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,具體演算法描述:

  • 選擇一個增量序列t1,t2,…,tk,其中ti>tj,tk=1;
  • 按增量序列個數k,對序列進行k 趟排序;
  • 每趟排序,根據對應的增量ti,將待排序列分割成若干長度為m 的子序列,分別對各子表進行直接插入排序。僅增量因子為1 時,整個序列作為一個表來處理,表長度即為整個序列的長度。

程式碼實現

def shellSort(arr):
    k = 1
    jmp = len(arr) // 2
    while jmp != 0:
        for i in range(jmp, len(arr)):
            tmp = arr[i]
            j = i - jmp
            while tmp < arr[j] and j >= 0:
                arr[j + jmp] = arr[j]
                j = j - jmp
            arr[jmp +
j] = tmp print("第{0}次排序過程".format(k)) k += 1 jmp = jmp // 2 return arr if __name__ == '__main__': arr = [2, 14, 6, 4, 1, 5] res = shellSort(arr) print(res) print(insertSort([2, 14, 6, 4, 1, 5]))

在這裡插入圖片描述