用Python實現希爾排序

1.希爾排序算法思想

    將待排序數組按照步長gap進行分組,然後將每組的元素利用直接插入排序的方法進行排序;每次將gap折半減小,循環上述操作;當gap=1時,利用直接插入,完成排序。

2.實質

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

   1.插入排序在對幾乎已經排好序的數據操作時,效率高,即可以達到線性排序的效率。

   2.但插入排序一般來說是低效的,因爲插入排序每次只能將數據移動一位。

3. 圖片演示如下

 

4.代碼實現

# 希爾排序
def insert_shell(list):
    # 初始化gap值
    gap = int(len(list) // 2)
    # 第一層循環:一次改變gap的值對列表進行分組
    while gap >= 1:
        # 利用直接插入排序的思想對分組數據進行排序
        # 從gap開始
        for i in range(gap, len(list)):
            # 從i-gap 開始與選定元素開始倒序比較,每個比較元素之間間隔gap
            for j in range(i - gap, -1, -gap):
                if list[j] > list[j + gap]:
                    list[j], list[j + gap] = list[j + gap], list[j]

        gap = int(gap // 2)


if __name__ == '__main__':
    list = [1, 3, 6, 5, 8, 9, 2, 7, 2, 0, 3, 7]
    insert_shell(list)
    print(list)

 5.希爾分析

    希爾排序是按照不同步長對元素進行插入排序,當剛開始元素很無序的時候,步長最大,所以插入排序的元素個數很少,速度很快;當元素基本有序了,步長很小,插入排序對於有序的序列效率很高。所以,希爾排序的時間複雜度會比o(n^2)好一些。

 

 

如果你和我有共同愛好,我們可以加個好友一起交流!

 

 

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