バブルソート(バブルソート)

これは、基本的な時間複雑記述はO(n ^ 2)

基本的な考え方バブルソート(バブルソート)である:スイッチその後、順次隣接する要素の値を比較し、(要素の小さいインデックスから)前後に照合順序を処理することにより、逆に要素の値が大きいほどことが判明した場合徐々に後方に向かって正面から、水中で気泡が徐々にそれを取るように。ソート処理なので、要素はもっと下の方の旅行は何のやり取りされていない場合、それはそう要素が交換されたかどうかを決定するためにソート処理フラグにフラグを設定するには、整然としたシーケンスを示し、その位置の近くに保ちます。このように比較的不必要を減らします。

パッケージcom.diyo.sort; 

インポートは、java.text.SimpleDateFormat;
 インポートjava.util.Arrays;
 インポートjava.util.Date; 

/ ** 
 * O(N ^ 2)のバブルソートバブルソートの時間計算
 * 
 * @author DengZY 
 * 
 * / 
パブリック クラスバブルソート{ 

    公共 静的 ボイドメイン(文字列[]引数){ 

        int型 ARR [] = {3 ,. 9、-1、10 -2。}; 

        // はO(n ^ 2)の速度を選別試験偽造、80000にテストデータ
 //         ; INT [] = ARR2は、新しい新しいINT [80000]ある
 //         のための(INT I = 0; I <80000は、Iが++){
 //            ARR2は[I] =(INT)(Math.random()* 999999); //は[0,999999)は多数の生成
 //は        } 

//         日=新しい新しい日付1日();
 //         てSimpleDateFormatてSimpleDateFormatてSimpleDateFormat新しい新=( "MM-DD-YYYYのHH:MM:SS");
 //         文字列date1Str = simpleDateFormat.format(DATE1);
 //         のSystem.out.println()は+ date1Strを"時間=ソーティング前の"; 
        
        のSystem.out。 println( "注文前に----- -----" ); 
        System.out.printlnは(Arrays.toString(ARR)); 

        System.out.printlnは(「----- ----並べ替えを開始- " );
         バブルソート(ARR) 
        のSystem.out.println( "ソート----- ----- END」);

        System.out.println( "ソート後----- -----" ); 
        System.out.printlnは(のArrays.toString(ARR)); 

//         日付=新しい新DATE2日();
 //         文字列date2Str simpleDateFormat.format =(DATE2);
 //         するSystem.out.println( "時間がソートされ=" + date2Str); 
        
        / * 
         * //最後から二番目に最初のパス、行の最大数をソート
      (INT J = 0; jに対して <arr.length - 1 - 0; J ++){// 番号は番号の前に後者よりも大きい場合には、交換
        (ARR [J] IF> ARR [J + 1]){
          TEMP ARR = [J];
          ARR [J] = ARR [J + +1];
           ARR [J + 1] = TEMP;
        }
      }
      のSystem.out.println( "初回通過ソートされた配列の後に"); のSystem.out。 println(Arrays.toString(ARR))。 * * * //ソート第旅行用最後から2番目の位置の行の第二の最大数(INT J = 0; J <arr.length - 1 - 1; J ++){// *もし後者の前数比数が多い、交換IF(ARR [J]> ARR [J + 1]){TEMP = ARR [J]; ARR [J] = ARR [J + * 1。]; ARR [J + 1] = TEMP;} }のSystem.out.println( "第二パスのソートされた配列の後に"); (Arrays.toString(ARR)の)*のSystem.out.println; * * //ソート3回目、第三の行数(; J < - 1 - arr.length 2; J ++ {// INT J = 0)のための第三の最小 *番号は番号の前に後者よりも大きい場合は、スイッチ(ARR [J]であれば> ARR [J + 1)= {TEMPのARR [J]; ARR [J] = ARR [+ J * 1]; ARR [J + 1] = TEMP;}}のSystem.out.println( "第三のトリップソートされた配列の後に" ); (Arrays.toString(ARRの)*のSystem.out.println); * //ソート第四回、下から4番目の行の第四の最大数(INT J = 0; J <arr.length - 1 - 3; J ++){ // *フロントの数が後者の数よりも大きい場合、交換IF(ARR [J]> ARR [J + 1]){TEMP = ARR [J]; ARR [J] = ARR [J + * 1。]; ARR [ J + 1] = TEMP;} }( " 回選別した後第四のアレイ")のSystem.out.println; (Arrays.toString(ARR)の)*のSystem.out.println;
* / } // バブルソート 公共ボイドバブルソートの静的(INT [] ARR){ int型のTEMP = 0;交換するため//一時変数 ブーリアンフラグ= FALSEを; //識別変数、繰り返しソート数減少させるため、交換か否かを示す ために(INT I = 0; I <arr.length - 1; Iは++){ (I + 1)回の//は、最終の行の最大数をソート (INT J = 0; J <arr.length - 1 -私は、J ++) { = trueにフラグに、 TEMP = ARR [J]。 //場合の数の上記比率多数の後ろに、為替 (ARR [J]> ARR [J + 1]){IF ; ARR [J] = ARR [J + 1] ; ARR [J + 1] = TEMP } } のSystem.out.println( "第一" +(I + 1) "回ソートされた配列"); System.out.printlnは()Arrays.toString(ARR)の; !ソート処理におけるIF()旗で{//旅行は、交換が起こったことはありません 破ります。 他{} はfalseフラグに=; //リセットフラグ、次決意用 } } } }

 (1)アレイの合計サイズ-1回サイクル

 (2)各ソートの数が徐々に減少します

 我々はいくつかの回の発注で、交換は一度発生しなかったことが判明した場合(3)は、事前に発注終わることができます。

おすすめ

転載: www.cnblogs.com/Diyo/p/11415909.html