まず、ソートヒルは何ですか
ソートヒル(シェルの並べ替え)され
、ソートに挿入
と呼ばれる一つの「狭いインクリメントソート、」アンアルゴリズムは、より効率的な改良版に直接挿入されます。
アイデア:
シェルソート単位で記録パケットを押すの主題である、直接挿入ソートの使用は、各ソートアルゴリズムは、増加とともに徐々に減少し、より多くのキーワードをそれぞれ含む、増分に減少したときに、ファイル全体がひとつのセットに分割され、アルゴリズムが終了されます
ロジック:
シェルで並べ替え、我々は最初にこれらの数字はグループ予選定期的に、ギャップを見つけ、最も重要なグループであります
ほぼすべての5群として;配列[9,1,2,5,7,4,8,6,3,5]を考えます。この配列は、その後、我々は次のグループに分かれています
グループI:94
グループII:18
グループIII:26
グループIV:53
第5群:75
パケットが終了した後、私たちは一種のグループごとに設定します
グループI:49
グループII:18
26の第三の組
第四群35
第5群57
我々は、ソートされたリオーダリング間隔を再設計しますアレイ2のグループのための(時間間隔が半分になります)
[4,1,2,3,5,9,8,6,5,7]
最初のセット:42585 ==「注文は24558を設定しました
第二セット:13967 ==「注文は13679を設定しました
2 1 4 3 5 6 7 8 9 5
ご注文後、私たちは、アレイ間隔リオーダー(次の間隔を半分に)対比較であるグループに1つの最後の時間を再設計します
1 2 3 4 5 6 7 8 9
注意:ヒル発注間隔は、一般的に、特に定義されていないが、通常は配列の長さの半分
第二に、コード
VAR ARR = [2,5,1,9,0] //算间隔 VAR LEN = Math.floor(arr.length / 2) (> 0 LEN)しながら{ (VAR I = LENため、I <arr.length ; Iは{++) VARの一時=のARR [I]。 {(J = J-LEN; J> = 0 && TEMP <ARR [J]のvar J = I-LEN)のための ARR [J + LEN] = ARR [J] } [J + LEN] ARR = TEMP。 } でlen = Math.floor(LEN / 2) }