この記事ではバラバラに格納されてる配列の中身を昇順で並び変える方法を紹介しています。
ちなみに使ってる言語は「 Java 」です。
ソートって一見難しそうに見えるけどコードを1つづつ理解すれば意外と単純です。
なので初心者の方でも分かるように1つづつ分解して解説していきます。
それではまずソースコードから見ていきましょう!
配列について詳しく知りたい方はJava訓練#12をご覧下さい。
バブルソート
int[] data = {60, 30, 12, 56, 76};
System.out.println(“入れ替える前”);
for(int b = 0; b < data.length; b++){
System.out.println(data[b]);
}
//配列の中身を入れ替える
for(int n = 0; n < data.length -1; n++){
for(int j = data.length -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 < data.length; x++){
System.out.println(data[x]);
}
このソースコードではまず入れ替える前の配列の中身を表示して、その後配列の中身を入れ替えてから、中身を表示するプログラムになっています。
int[] data = {60, 30, 12, 56, 76};
dataという変数名で配列を作成します。
配列の中身は{60, 30, 12, 56, 76}
です。
for(int b = 0; b < data.length; b++){
System.out.println(data[b]);
for文を使って配列の中身を1つづつ表示します。
data[b] の b に要素番号が入っていて、繰り返されるたびに一づつ増えていくので配列の中身が取り出せます。
「data.length」は配列の長さのことで、この場合5つデータが入っているので配列の長さは「5」になります。
for(int n = 0; n < data.length -1; n++){
for(int j = data.length -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番最後は並び替えが終了しているはずなので「data.length -1 」としてます。
2つ目の for文② で要素を比べる為の繰り返しをします。その時、配列の右側から左に向かうようにして for文①の繰り返し回数まで行ったら for文② の繰り返しが終わり、また for文①に戻ります。
※図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
この仕組みがfor文①が繰り返されるたびに行われます。
そしてもう一度 for文を使って、配列の中身を取り出すと昇順になって表示されます。
また、降順にしたい時は if文の比較演算子を反対にすると降順になります。
50個の配列の要素にランダムな整数を代入してバブルソートで並び替えるソースコードも紹介しています。良かったら下の記事もご覧ください。
更にプログラミングをもっと学んでみたい方はオンラインブートキャンプ 無料体験
をオススメします。