Sort.java
アウトプット用!!
#3回目は、
配列の中身を小さい順に並び変えるプログラムを作っていく!!
今回はアルゴリズムの勉強も兼ねてあえてjava.utilパッケージにあるArrays.sort(arr)を使用しないでプログラミングをしてみました。
そこで配列の中身を小さい順に並べるにあたりバブルソート(基本交換法)でやってみました。
こちらがコードになります。
class Sort {
public static void main(String[] args) {
int Sort[] = {8,1,7,5};
int x;
int i = 0;
for(i = 0; i <= Sort.length-2; i++) { //外側のループ(最初の要素から最後の要素の一つ手前に向かって後ろに進む)
int j = Sort.length-1; //最後の要素
for(j = Sort.length-1; j>=i+1; j--) { //内側のループ(外側のループの要素の一つ後ろに向かって前に進む。)
if(Sort[j-1] > Sort[j]) {
x = Sort[j];
Sort[j] = Sort[j-1];
Sort[j-1] = x;
//比較して前が大きかったら交換が行われる
}
}
j = j - 1;
}
i = i + 1;
System.out.println(Arrays.toString(Sort));
}
}
コンソール
[1, 5, 7, 8]
Sort.java
解説
①外側ループ
for(i = 0; i < Sort.length-2; i++)
初期化式に0(最初の要素)から最後の要素の一つ手前に向かって後ろに進む。
そうすることで、内側ループで隣と比較する時のスタート地点を配列の後ろから前へ向かってできる。
②int j = Sort.length-1;
変数jに配列の最後を代入。
③内側のループ
配列の最後の要素から外側ループの先頭から一つ後ろに向かって前に進む
if文で前後を比較して前が大きかったら交換する。
if(7 > 5)
は7の方が大きいので交換する
すると、
配列の中身は{8,1,5,7}になる
2>=1なのでjのループ継続
③を繰り返し行う
if(1 > 5)
1が小さいので交換はしない。
配列の中身は{8,1,5,7}になる
1>=1なのでjのループ継続
③を繰り返し行う
if(8 > 1)
8が大きいので交換する
配列の中身は{1,8,5,7}
になり配列の最小値1が1番左に来てソート済みになる。
0 >= 1は繰り返しできないのでそこでjのループを抜けて
i = i + 1で変数iに要素を追加して外側のループ処理を開始する。
これで配列の先頭に最も小さい値が入りソート済みになる。配列[1]から配列[3]で同様に中身を小さい順に並べる。
配列{8,5,7}
①から③を繰り返し行って小さい順にならべていく感じです。
Sort2.java
java.utilパッケージで作成したプログラムも載せときます。
import java.util.Arrays;
class Sort2 {
public static void main(String[] args) {
int Sort[] = {8,1,7,5};
Arrays.sort(Sort);
for(int i = 0; i < Sort.length; i++);
System.out.println(Arrays.toString(Sort));
}
}
アルゴリズムを考えない方が明らかに楽にコードが書けますね
今回はあえてアルゴリズムを意識してプログラムを行いました。
プログラムを行う上でアルゴリズムは大事になってくると思うので、これからもアルゴリズムを意識してプログラムを書いていきたいです。
とりあえず楽しみながら勉強します
おつかれさまでした。