初心者でも分かるバブルソート〜配列を順番に並べ換える〜

program プログラミング
スポンサーリンク

この記事ではバラバラに格納されてる配列の中身を昇順で並び変える方法を紹介しています。

ちなみに使ってる言語は「  Java  」です。

ソートって一見難しそうに見えるけどコードを1つづつ理解すれば意外と単純です。

なので初心者の方でも分かるように1つづつ分解して解説していきます。

それではまずソースコードから見ていきましょう!

配列について詳しく知りたい方はJava訓練#12をご覧下さい。

バブルソート

program

int[] data = {60, 30, 12, 56, 76};
int a = data.length;

System.out.println(“入れ替える前”);

for(int b = 0; b < a; b++){
  System.out.println(data[b]);
}
//配列の中身を入れ替える
for(int n = 0; n < a -1; n++){
  for(int j = a -1; j > n; j--){
    if(data[j - 1] > data[j]){
       int box = data[j];
       data[j] = data[j - 1];
       data[j - 1] = box;
     }
   }
}
System.out.println(“入れ替えた後”);

for(int x = 0; x < a; x++){
   System.out.println(data[x]);
}

このソースコードではまず配列の中身を入れ替える前を表示して、その後配列の中身を入れ替えてからまた、中身を表示するプログラムになっています。

int a = data.length;

このコードではfor文で data.length といちいち書くのが大変だしコードが長くなるので 変数 a に代入しています。代入しなくても問題ありません。

for(int b = 0; b < a; b++){
  System.out.println(data[b]);

このコードで配列の中身を1つづつ表示します。
data[b] の b に最初0が入っていて、繰り返されるたびに一づつ増えていくので配列の中身が取り出せます。

for(int n = 0; n < a -1; n++){
  for(int j = a -1; j > n; j--){
    if(data[j - 1] > data[j]){
       int box = data[j];
       data[j] = data[j - 1];
       data[j - 1] = box;

このコードで配列の中身を入れ替えています。更に分解してみてみましょう。

for文の説明

1つ目の for文① で配列の要素分繰り返すようにしています。1番最後は並び替えが終了しているはずなので a-1 としてます。
2つ目の for文② で要素を比べる為の繰り返しをします。その時、配列の右側から左に向かうようにして for文①の繰り返し回数まで行ったら for文② の繰り返しが終わり、また for文①に戻ります。

※図1

画像1

if文の説明

if文の条件の最初は図1でいうとdata[j – 1] は「56」で、data[j] が 「76」です。for文②が実行されると右側に1つづつずれていきます。すると 30> 12でtrue になり if文の処理がされます。
まず「12」がひとまずboxに代入されます。
「12」が入ってた所に「30」が入り、「30」が入ってた所に「box(12)」が入る。という仕組みになっています。

※図2

画像2

この仕組みがfor文①が繰り返されるたびに行われます。

そしてもう一度 for文を使って、配列の中身を取り出すと昇順になって表示されます。

また、降順にしたい時は if文の比較演算子を反対にすると降順になります。

50個の配列の要素にランダムな整数を代入してバブルソートで並び替えるソースコードも紹介しています。良かったら下の記事もご覧ください。

更にプログラミングをもっと学んでみたい方はオンラインブートキャンプ 無料体験
をオススメします。

コメント