石田修二 > コンピュータメモ > Java > (サイト内検索)
バブルソートの実装
for (i=score.length; i > 1; i--){ for(j=0; j < i-1; j++){ if (score[j] > score[j+1]){ tmp = score[j]; score[j] = score[j+1]; score[j+1] = tmp; } } }
for(j=0; j < i-1; j++){
の部分は要素を順番に比較。i は,比較する要素の場所で,j と j+1 を比較している。i 個の要素が範囲内にあるとすると,j は0番からなので, i-1 番目までの要素を比較することになります。
更に,値の交換
tmp = score[j]; score[j] = score[j+1]; score[j+1] = tmp;
この時,片方の値を tmp という一時保管する変数に入れておく必要があることに注意しましょう。
こうして,バブルソートは実装できます。
今回は隣同士の交換でしたが,より一般的な仕様として,2つの要素番号で指定された値を交換する,というふうにしてみます。
値を入れ替えるメソッドの定義は次の通り。
private static void ExValue(int[]a, int i, int j){ int tmp = a[i]; // 値を交換 a[i] = a[j]; // 値を交換 a[j] = tmp; // 値を交換 }
引数として,データが入った配列(int[]a
の部分),入れ替える要素番号を2つ取ります((int i, int j)
の箇所)。あとは指定された要素の値を交換するだけです。
このようなメソッドを定義すると,mainメソッドの方では,以下のようにすっきりと書くことができます。
if (score[j] < score[j+1]){ ExValue(score, j, j+1); }
値がコピーされるのは,プリミティブ型と言われる,基本的な変数の型になります。これには,整数型(int),実数型(float, double),論理値型(boolean)などが含まれ,全部で8種類あります。
それ以外は参照型と呼ばれ,すべて実体を指すことになります。
リンクはご自由にどうぞ。
【石田修二トップページ】 【コンピュータメモ】 【Java】
Last modified: 2016-03-01 22:39:46