バブルソート、挿入ソートと選択ソート:三つの基本的なソートと効率の比較を達成

ThreeTypesOfBaseSortクラス{公共
  // ==========================の効率の比較===========三つの基本的なソート=================
  パブリック静的無効メイン(文字列[] args){
    ThreeTypesOfBaseSort新しい新しいThreeTypesOfBaseSortソート=();

    百万レベルを選別//テストアレイ、基本的な3を参照してくださいソートの効率差:
    INT番号= 500000;
    INT []配列=新しい新しいINT [数];
    INT []配列1 =新たな新しいINT [番号];
    []配列2 =新しい新しいINT [番号] int型
    のための(INT I = 0 ; I <Array.lengthとすること; Iは++){
      int型新しい新しいTEMP =ランダム()nextInt(番号);.
      配列[I] = TEMP;
      配列1 [I] = TEMP;
      配列2 [I] = TEMP;
    }
    のSystem.out.println ( "アレイ準備〜");

    ロングSTART1 =にSystem.currentTimeMillis();
    sort.bubbleSort(アレイ);
    ロングEND1 =にSystem.currentTimeMillis();
    のSystem.out.println( "バブルソートを使用する:" +(END1 - START1) ); // 5 万人以上が:4302551000:41575000: 1644079

    ロングSTART2 =にSystem.currentTimeMillis();
    sort.selectionSort(配列1);
    ロングEND2 =にSystem.currentTimeMillis();
    System.out.printlnは( "とselectSort:" +(END2 - START2) ); // 5 百万: 7275000:742 531 000 281 276 ==「5.7倍高速バブルよりもソートを選択します。

    START3 =にSystem.currentTimeMillisロング();
    sort.insertionSort(配列2);
    ロングEND3 =にSystem.currentTimeMillis();
    System.out.printlnは( "挿入ソートを使用:" +(END3 - START3を) ); // 5 百万:827 0.50百万:84644。==「ソート選択よりも少し遅く挿入します。
  }

  // ==========================バブルソート===================== =======
  / **
  *バブルソート:隣接する二つの数字を比較する、それが大きな順に小さい場合は、より大きな数、毎回交換を置きます。
  最適化のアイデアの*バブルソート:
  *①空の宣告;
  *②の要素の数は非常に特別であるとき:0,1数があるとき;
  *③配列が注文した、またはすべての要素が同じである配列されています
  * /
  公共のボイドバブルソート(INT []ターゲット){
    IF(ターゲット== NULL){
      リターン;
    }
    trueにブール=タグ;配列を注文された//場合は、交換する必要はありません。
    以下のために(; I I = 0 int型 <target.length -1 &&タグ; iは++){// アウターループ:要素-1)倍の対照群と比較:(番号の数。
      = FALSEタグに;
      のため(INT J = 0; J <target.length - I - 1、J ++){//内部ループ:それぞれの比較の数を制御:比較比較は、各グループの最初の要素から始まります背面に移動するとき、比較= target.length-1-Iの数の各々をそれぞれ最大の比較。
        IF(ターゲット[J]>ターゲット [J + 1]){
          ターゲットTEMP = INT [J];
          ターゲット[J] =目標[J + 1];
          ターゲット[J + 1] = TEMP;
          タグ= trueに;
        }
      }
    }
  }

  // ===========選択ソート============================ ============
  / **
  *ソートを選択します。
  *最初のn個の要素から選択されたトリップデータシーケンスは、最も前方の位置に分/要素をキーワードと、
  * n-1個の要素から選択されたトリップ・分/要素とにソートされていません要素の一番の位置。だから、N-1回の後に注文を完了します。
  * /
  公共ボイド選択ソート(INT []目標){
    IF(ターゲット== NULL){
      リターン;
    }
    ため(INT I = 0; I <target.length - 1; Iは++){
      int型tempIndex = I;
      のための(INT J = I + 1、J <target.length ; J ++){
        IF(ターゲット[tempIndex]>ターゲット[J]){
          tempIndex = J;
        }
      }
    int型のTEMP = [tempIndex]ターゲット、
    ターゲット[tempIndex]ターゲット= [I]は、
    ターゲット[I] = TEMPを;
    }
  }

  // == =================== insertSort ============================== ======
  / **
  *挿入ソート:ソートされた配列決定されたデータにデータを挿入する(通常、デフォルトは第2の比較素子から順に第一の要素である)、
  *よう新しい、プラス順データの数を取得するために、アルゴリズムをソートすることは、少量のデータに適しています。
  * /
  公共ボイド挿入ソート(INT []目標){
    IF(ターゲット== NULL){
      リターン;
    }
    //外側のループを比較の数を設定し;
    (I = 0をint型のために、私はtarget.lengthを< - 1; I ++ ){
      // 2つのサイクル:外側の比較対照グループの数、グループを識別するための内部責任、ソートされた配列された後、これにランダムな要素を比較することにより、無秩序の最初の要素規則的な配列。
      以下のために(INT I = J + 1、J> 0; J - ){
        IF(ターゲット[J - 1]>ターゲット[J]){
          int型の標的TEMP = [J];
          ターゲット[J] =目標[J - 1];
          ターゲット[J - 1] = TEMP;
        }他{
          BREAK;
        }
      }
    }
  }
}

おすすめ

転載: www.cnblogs.com/laipimei/p/11118561.html