ヒルソートを達成するためにJavaの道

まず、基本的な考え方と簡単にヒルソート

  また、アルゴリズムをソートソート降順増分として知られている丘は、改良されたバージョンのより効率的な挿入ソートです。しかし、ヒルは、非安定ソートアルゴリズムをソートします。挿入ソートよりも、次の一般的な改善を持っているソートヒル:

  • 通常、挿入ソートは、データを移動することができ、およびヒル、ステップサイズが減少している移動(ステップ=配列の長さ/ 2)に応じてステップのソート。

  基本的な考え方は、ヒルをソートすることである:最初のソートいくつかのサブシーケンス直接挿入に分類されるシーケンス全体を分割し、全体の記録シーケンスが順序付けられた実質的になるように、そして順次、すべてのレコードのための直接挿入ソート

第二に、基本的な手順

  1. 全体の配列は、N / 2個のサブ配列、配列のN / 2 + K(K <= N / 2)数を有する、すなわち最初のk個に分割されています。
  2. シーケンスは、それぞれの挿入ソートソート順序と方法を小分け。
  3. シーケンス全体は、n / 4のサブ配列、配列および良好な点に分割される挿入ソートに従ってソート。
  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。// 挿入する挿入配列エレメント
                
            } 
        } 
        戻り進; 
         
     } 
}

結果:

 

おすすめ

転載: www.cnblogs.com/shareAndStudy/p/12455186.html
おすすめ