初日学習アルゴリズム-------主なソートアルゴリズム

いわゆるシークエンシングは、増加または操作をラインアップ小さく、特定のサイズや特定のキーワードに従ったレコードの束を作ることです。アルゴリズムを並べ替え、それは請求の配置に応じて記録方法を作成する方法です。我々は、特に大量のデータを処理するには、多くの地域でソートアルゴリズムにかなりの注目を受けました。良いアルゴリズムは多くのリソースを節約することができます。現実的な良いアルゴリズムを取得するには、アカウントに制約や仕様データを取って、さまざまな分野では、推論や分析の多くを介して取得します。

 

アルゴリズムのクラステンプレートをソート

------------------------------------------

パブリック クラスの例{
     公共 静的 ボイドソート(匹敵[] A){ 
    } 
    プライベート 静的 ブール(lessComparableのV匹敵W){
         リターンのcompareTo V 0 <(W) 
    } 
    プライベート 静的 ボイド EXCH(匹敵[]、int型私は、INT {j)は
        同等T = [I]。
        [i]は = [j]を。
        [] = T。
    } 
    プライベート 静的 ボイドショー(匹敵[] A){
         //単一ラインアレイにおける印刷
        のためのint型 ; Iはa.lengthを<I ++はI = 0 
            StdOut.print(A [I]が + "" ); 
        StdOut.printIn(); 
    } 
    パブリック 静的 ブール関数issorted(匹敵[] A) {
         // テスト規則正しい配列要素かどうか
        のためにint型 I = 1; Iはa.lengthを<; I ++ _)
         のiF(以下([I]、A [I - 1]))リターン falseに戻り trueに; 
    } 
    公共 静的 ボイドメイン(文字列[]引数){
         // 標準入力文字列から読み出され、それらに出力をソート
        文字列[] =のIn.readStrings()。
        ソート(a)は、
        アサート関数issortedを(A)。
        ショー(A); 
    } 
}

------------------------------------------

選択ソート

  最も単純なソートアルゴリズムの一つは、このている:第一に、小の配列の要素を見つけ、(最初の要素は、最小要素と、それ自身の交換の場合)第二に、それはアレイ及びスワップ位置の最初の要素であろう。再び、それはアレイ交換位置の第2の要素となり、素子の残りの最小要素を見つけます。など、配列全体がソートされるまで。それは常に残りの要素のうちの最小を選択しているので、この方法では、選択ソートと呼ばれています。

  全体的に、選択ソートを理解し、簡単なソートアルゴリズムを実装するのは非常に簡単です、それは2つの非常に異なった特性を有しています。

  時間と入力とは独立して実行最小の要素の配列を見つけ、人々の選択ソートの使用があったことを見つけるために驚い可能性があるため、コンピュータの実装における欠点があり、それは、再びこのような性質のいくつかのケースでは、次のパススキャンのいずれかの情報を提供していませんスキャンするには順序または配列を移動させます。このソートアルゴリズムは、1つのプライマリソートキー全て等しい時間アレイと、実際の長として使用される配列の要素のランダムな配列を選択します!私たちが見るように、他のアルゴリズムは、入力の初期状態を使用してでより熟達になります。

  データ移動は少なくともです各交換は、このように選別及びN番目の選択順序がアレイの数及び大きさを変化させない相互交換のために選択された2つの配列の要素の値を、変化する線形関係です。私たちは、他のアルゴリズムは、この機能を持っていない(数の増加及び要素は、対数線形または正方形のレベルすでにされる順序のほとんどを)検討します。

選択ソートコード

------------------------------------------

1  パブリック クラス選択{
 2    恥骨静的 ボイドソート(同等[]){
 3は、         // []昇順で順位
4          INT N = a.length;        // 配列の長さ
。5          INT I = 0; iがNを<。 ++ I ){
 6。             // [I]乃至[iが+ 1..N]最小のスイッチング素子
7。             int型の分= I;         // 最小要素のインデックス
。8              のためのint型 Jは= I + 1、。J < N; J ++ 9。                 IF(以下([J]、[分]))分= J;
 10              EXCH(A、I、分)。
11          }
 12である     }
 13である }
 14  // 以下()、EXCH()関数issorted()及び主()および他の方法、 "アルゴリズムソートクラステンプレート"を参照してください。

------------------------------------------

挿入ソート

  通常の方法を終えた人々が、それぞれのカードが他のカードの中に発注されている適切な位置に挿入されるとブリッジです。コンピュータの実装では、我々は挿入する前に休息するために必要なすべての要素を挿入する要素のための部屋を作るために右のいずれかに移動されます。このアルゴリズムは挿入ソートと呼ばれています。

  選択ソートと同様に、左側に現在のインデックスのすべての要素を注文しているが、その最終的な位置は不明である、小さな要素のための余地を作るために、彼らが移動してもよいです。しかし、インデックスが配列の右端に達したときに、配列が完了した並べ替え。

  そして、別の種類を選択し、挿入ソートに必要な時間は、要素の初期入力順序に依存します。例えば、の要素が大となっており(またはほぼ規則正しい)アレイがソートにソートされる持っているがランダムな順序でまたは逆の順序配列の配列よりもはるかに高速です。

挿入ソートコード

------------------------------------------

パブリック クラス挿入{ 
    恥骨静的 ボイドソート(同等[]){
         // []昇順に
        INT N = a.length;        // 配列の長さ
        のためにINT I = 1; Iは、N <; I ++のを){
             // [i]は[I-1] ..間に挿入されている
            ためINT ; J> 0 &&以下(A [J]、A [-J 1。]); J、J = I 
                EXCH( 、J、J -1 ); 
        } 
    } 
} 
// 以下()、EXCH()関数issorted()及び主()および他の方法は、 "アルゴリズムソートクラステンプレート"を参照してください。

------------------------------------------

シェルソート

  それだけで隣接する要素をスワップするための要素が唯一できるように、自然の主要なソートアルゴリズムの価値を実証するために、我々は、クイックソート挿入ソート、挿入ソートアルゴリズムは、注文のうち、大規模な配列のための非常に遅い学びます配列の一端から他端に少しずつ。アレイの主キーの右端に最小の要素は、その正しい位置に移動する場合、例えば、N-1、または移動が必要です。部分的に挿入ソート順序配列がソートされると、最終的にローカル配列をソートし、単に改善挿入ソートではなく、隣接するスイッチング素子を高速化するシェルソート順序。

  丘ソーティング考え任意の間隔hでのアレイの要素は、そのようなアレイは、Hと呼ばれる単語の規則正しい配列で順序付けされることで、H Hはアレイが互いに独立編組の規則正しい配列で順序付け一緒に成る配列より小さな時間を達成するために、時間が大きい場合、我々は遠く離れた場所に要素を移動することができ、発注の際に(図2.12を参照)は、任意の順序のためにこれを作成するための便利な方法を命じたとき、シーケンスの終了時にH 1、我々は、アレイをソートすることができます。これは一種の丘です。23アルゴリズムは、シーケンス1/2(32-1)を使用N3 1から低下し始めます。私たちは、このシーケンスが増加するシーケンスと呼ばれる呼び出します。リアルタイム計算アルゴリズム23は、そのシーケンスをインクリメントする、別の方法は、配列が配列に格納された増分することです。

 

 H = 4

  L E E A M H L E P S O L T S X R

  L ------ M ------ ------ P T

     E ------- H ------ S ------ S

       そして、L ------- ------ ------ O X

           ------- E ------- L ----- R

           ソートされた配列さh Hすなわち順序付けられたサブアレイのアレイ
  丘をソートするために実施される方法Hそれぞれは、独立して、Hサブアレイの挿入ソートでソート。サブアレイは、互いに独立しているので、しかし、より簡単な方法は、配列の各要素の前にサブH-に切り替えられます(右の空間にその要素がより大きい)がその要素よりも大きいためです。コード移動要素における距離のみhに挿入ソートによって1にする必要があります。このような実装ヒルソートは似ていますが、異なる挿入ソート増分プロセスに変換されます。
それはスケールを秤量し、注文サブアレイため丘は、より効率的なソーティング。ソート各サブアレイの開始が非常に短い、サブアレイは、部分的に挿入ソートのために非常に適しているどちらも、発注後に順序付けられています。サブセクションの度合い整然とした配列は、シーケンスの増加の選択に依存します。ヒルは、性能の十分な理解がまだ挑戦です命じました。実際には、アルゴリズム2.3は、我々は正確に障害の性能特性の配列をソートするために彼らの方法を記述することはできません唯一のものです。

ヒルソートコード

------------------------------------------

パブリック クラスシェル{
     公共 静的 ボイドソート(匹敵[] A){
         // []昇順に
        INT N = a.length;
         INT H = 1 ;
         つつ。(H <N- / 3)1個のH + = 3H。     // 1,4,13,40,121,364,1093 ... 
        しばらく(H> = 1 ){
             // 配列注文時間となる
            ためint型 IはH =; Iは、Nを<; Iは++ ){
             / / [ - H i]は、[I]に挿入されている [I - 2H]、[I - 3 *のH] ... 
                するためにINT J = I; J> = Hは&&以下( [J]、A [J - H]); J - = H) 
                    EXCH(A、J、J- H); 
            } 
                H = Hの/ 3 ; 
        } 
    } 
} 
// 以下()、exeh()関数issorted()及び主()および他の方法は、 "モードソートアルゴリズムクラス"

------------------------------------------

 

おすすめ

転載: www.cnblogs.com/algorithms-learn-note/p/10974601.html