まず、基本的な考え方と簡単にヒルソート
また、アルゴリズムをソートソート降順増分として知られている丘は、改良されたバージョンのより効率的な挿入ソートです。しかし、ヒルは、非安定ソートアルゴリズムをソートします。挿入ソートよりも、次の一般的な改善を持っているソートヒル:
- 通常、挿入ソートは、データを移動することができ、およびヒル、ステップサイズが減少している移動(ステップ=配列の長さ/ 2)に応じてステップのソート。
基本的な考え方は、ヒルをソートすることである:最初のソートいくつかのサブシーケンス直接挿入に分類されるシーケンス全体を分割し、全体の記録シーケンスが順序付けられた実質的になるように、そして順次、すべてのレコードのための直接挿入ソート
第二に、基本的な手順
- 全体の配列は、N / 2個のサブ配列、配列のN / 2 + K(K <= N / 2)数を有する、すなわち最初のk個に分割されています。
- シーケンスは、それぞれの挿入ソートソート順序と方法を小分け。
- シーケンス全体は、n / 4のサブ配列、配列および良好な点に分割される挿入ソートに従ってソート。
- サブシーケンスの数は、ソートが完了するまで、上記動作を行う続けます。
第三に、ケーススタディ
たとえば、シーケンス1,5,4,30,6,29,5,20
並べ替えの最初の旅行:プロモーター配列番号= N / 2 = 4の4つのサブシーケンス{1,6}、{5,29}、{4,5}、{30、20}のために、これらの4つのシーケンス{オーダー後1,5,4,20,6,29,5,30}。
第二のトリップ分類:プロモーター配列番号= N / 4 = 2つの2つの配列は、{1,4,6,5}、{5,20,29,30}、これら二つの配列{1,5の順であります4,20,5,29,6,30}。
第二のトリップ分類:プロモーター配列番号= N / 8 = 1サブシーケンス{1,4,6,5,5,20,29,30}及びこれら二つ{1,4,5の配列順序、 5,6,20,29,30}。
第四に、コード・ショー
パブリック クラスJavaSort { 公共 静的 ボイドメイン(文字列[]引数){ intは A [] = 新しい新しい INT [] {1,5,4,30,6,29,5,20 }; のSystem.out.println(「ソート"+:アレイ前Arrays.toString()の); シェルソート(); のSystem.out.println( "ソート済みアレイ:「+ Arrays.toString(の)); } / ** * * @param 進ソートする配列 * @return ソートされた配列を返す * / パブリック 静的 INT []シェルソート(INT []進)を{ INT LEN = ary.length; のための(INT NUM = LEN / 2; NUM> = 1; NUM = NUM / 2){ // シーケンスNUMの数であり、numは前記元の配列位置における位相差の配列要素 / / ソートのソートに、挿入を有する配列の配列を見つける ための(INT ; I <ary.length I ++ I = NUM {) INT J = I-NUM; // 要素の配列位置が挿入さ int型 TEMP =進[I ]; // 配列がステージング要素値挿入される 一方(J> 0 && TEMP <進[J]){ // 要素を挿入する場所を見つける配列要素の比較を挿入する要素を 進を[J + NUM] = 進[J ]; J = J- NUM; } 進[J + NUM] = TEMP。// 挿入する挿入配列エレメント } } 戻り進; } }
結果: