データ構造とアルゴリズム - ソートアルゴリズム - シェルソート

 ##################ヒルは#######################ソート#を

「」 " 

シェルソート
シェルソート、挿入ソートの改良版である

アルゴリズムのステップ
シーケンスに全体としてではなく、配列の複数として
。一定間隔の仮定4は= GAPの
連想リスト= [54,26 、93,17,77,31,44,55,20] 
54,26,93,17,77,31,44,55,20 
グループ間隔は4である547 720、
   2のセットであり、2631年、スペーサ4、
      グループ3、4である9344は、スペーサーであり、
         グループ4,4である1755はスペーサーであり、

各グループは、ソートアルゴリズム挿入され、
[547720]、すなわち、最初の54であります前面および背面、挿入にそれぞれを比較、-------- [205477]は

すべて再び1つのシーケンスに合わせた、完了した後にソートされ、
そして再び、そのようなギャップ= 2として、間隔を変更しますアルゴリズムソート挿入は、

再び全体またはシーケンスとしてマージされ
、再び調整ギャップ= 1このようなギャップを、次いでソートが完了するまで再びソート



「」"

 

 

 

##################ヒルは#######################ソート#を

#初版:
DEFのshell_sort(連想リスト):
    N- = LEN(連想リスト)
    ギャップ= N-2 // 
    ながらギャップ> 0: は、最も外側の制御ループは、小さいギャップである
        範囲でJ(のためGAP、N-):
            私は= J 
            I> 0つつ:
                連想リストIF [I] <連想リスト[I - GAP]:
                    連想リスト[I]、連想リスト[I - GAP =連想リスト[I - GAP]、連想リスト[I] 
                    I - =ギャップ
                :他
                    BREAKの
        #はギャップステップを短く、
        ギャップ= 2 // 

#第二版:
DEFのshell_sort2(連想リスト):
    N- = LEN(連想リスト)
    #初期段階
    ギャップ= N-2 // 
    ながらギャップ> 0: 挿入ソートのステップ
        :Iの範囲内(ギャップ、N)用
            J = 
            #插入排序
            一方J> =ギャップと連想リスト[J-ギャップ]>連想リスト[J]:
                連想リスト[J-ギャップ]、連想リスト[J] =連想リスト[J] 、連想リスト[J-ギャップ] 
                J - =ギャップ
        #得到新的步长
        ギャップ=ギャップ/ 2 

なら__name__ == '__main__':

    連想リスト= [54,26,93,17,77,31,44,55,20 ] 
    shell_sort(連想リスト)
    プリント(連想リスト)

 

おすすめ

転載: www.cnblogs.com/andy0816/p/12348381.html