Javaの古典的なバブルソートアルゴリズム(バブルソート)

原理:隣接する二つの値を比較するために、右に大きい要素の値を交換します

考え順次隣り合うの数を比較し、番号が背面に多数の前方に配置されています。すなわち、最初のパス:まず、第1のコンパレータと、多数のリリース後の第二の数、前小数点、。最後の二つの数字は比較まで、多数のリリース前と後の第2の数と第3の数、小数点を比較するため、多数のリリース後、小数点の前に、続け。トリップステップを繰り返し、すべての並べ替えが完了するまで。 

最初の旅行が完了した後、最後の最大アレイの特定の数、旅行は第2の比較に参加しないので、

第二のトリップが完了した後に比較は第三の旅行に参加していないので、配列の最後から二番目の数は、最大でなければなりません、

だから、片道比較の数-1

次の例:

INT []のarg = {6,3,8,2,9,1}

最初の旅行の並び替え:

    最初のソート:6と比較例3、図6は、切り替え位置3よりも大きい:368291

    6未満8、無交換位置に比べ6,8:第二ソート368291

    第三の分類:8と比較例2、図8に示すように、交換位置2よりも大きい:362891

    第四の分類:8,9 9より8以下の比較、無切換位置:362891

    第五の分類:9と比較例1:1よりも大きい9、位置切り替え:362819

    3回の初回通過総5回の比較交換し、ソート結果:362819


 

第二のトリップ並び替え:

    最初の分類:3未満6と比較して3,6、位置を交換しません:362819

    第二ソート:6と比較例2、2以上6、交換位置:326819

    第三の分類:比較6,8、6、8より大きい、無交換位置:326819

    第四の分類:8と比較例1、図8は、スイッチング位置1よりも大きい:326189

    4第二のパスの比較交換機2の合計は、ソートの結果:326189


 

第三のトリップ並び替え:

    最初のソート:3と比較例2、図3に示すように、交換位置2よりも大きい:236189

    第二ソート:3未満6と比較して3,6、位置を交換しません:236189

    第三の分類:6と比較例1、図6は、スイッチング位置1よりも大きい:231689

    第二のパスの比較は、結果の並べ替え、3交換機2の合計を行った:231689


 

第四に、トリップ並び替え:

    最初のソート:2及び3は、位置を変更しない2未満3と比較:231689

    第二ソート:3と比較例1,3は、スイッチング位置1よりも大きい:213689

    1を交換する2つの第二のパスの比較の合計が、ソート結果:213689


 

第五旅の並び替え:

    最初のソート:1と比較例2、位置切り替え、1より大きい:123689

    1を交換する1秒パスの比較の合計が、ソート結果:123689


 

最終結果:123 689

従って、N(arg.length)が完了デジタル並べ替えるために、N-1回の合計をソートする必要が、私は数(Ni)の倍であるパスのすべての並べ替えは、二重ループを使用することができる回数を外部制御ループ片道内部の制御サイクル

以下のためにint型 i = 0; I <arg.length-1; iは++ ){
     ためint型、Y = 0; Y <arg.length-I-1; Y ++ ){ 
 
    } 
}

利点のバブルソート:すべてのソートが大きな価値を見つけるための旅になりますので、ソートするすべての旅行、比較は、少なくなります。最後以外の数の数を比較する必要がある特定の数の最後の行に比べて最初のパスは、とりわけ、最大数、第二のパスのソートされたときの後、あなたも最大を見つけることができる:上記の実施例第三の旅を比較するときに戻って数倍の行数が第2の比較に参加するために、必要がある唯一のすべてを比較するために旅行を行っていなかった、言い換えれば、そうで......最後の二つの数字以外に加えて、数を比較し、比較的小さなへの旅は、ある程度、アルゴリズムの量を減らします。

コードの実装:

パブリック クラスベース{ 
 
    公共 静的 ボイドメイン(文字列[]引数){
         INT [] ARR = {10、5、8、6、3、7、2、6、9 }。
        バブルソート(ARR)。
        以下のためにint型、iは<.LENGTHをARR; I = 0 iは++ ){ 
            System.out.print(ARR [I])。
        } 
 
    } 
 
    パブリック 静的 ボイドバブルソート(INT []のarg){
         ためint型 i = 0; iはarg.length < - 1; iは++){ // 控制循环次数(N-1)
            のためのINT Y = 0; Y < arg.length - I-1; Y ++ 
            {
                もし(引数[と]>引数[Y + 1 ]){
                     int型の TEMP = 引数[と]。
                    引数[Y] = argを[Y + 1 ]。
                    引数[Y + 1] = TEMP。
                } 
            } 
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/zouwangblog/p/10984663.html