アウトプット用!!
#第4回目は挿入ソートで配列の中身を小さい順に並べるプログラムを作っていく!!
今回も前回と同様にアルゴリズムを意識してプログラミングしてみました。
早速作っていきます。
class Sort3 {
public static void main(String[] args) {
int Sort[] = {9,5,3,1};
int i;
int j;
int x;
for(i = 1; i <= Sort.length-1; i++) { //配列[0]は自動的に整列済み。なので[1]から配列の最後まで値をずらす
j = i;
while( j >= 1 && 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));
}
}
①配列の宣言と初期化
int Sort[] = {9,5,3,1};
②メンバ変数の定義
int i;
int j;
int x;
③外側のループと内側ループ
外側ループ
ループカウンタをiとして、iは配列の要素二番目から配列の最後の要素に向かって後ろに進む。
内側のループ
ループカウンタをjとして、配列の要素二番目に向かって前に進む。
そこで一つ前と比較して大きければ交換する。
次に値を直接入れながら処理の流れを確認してみる。
ノートに書きながらだと処理の流れをイメージしやすいです。
for(i = 1; i <= Sort.length-1; i++) { //配列[0]は自動的に整列済みになるので配列[1]から配列の最後配列の要素まで値をずらす
j = i;
while( j >= 1 && Sort[j-1] > Sort[j]) { //
x = Sort[j];
Sort[j] = Sort[j-1];
Sort[j-1] = x;
j = j -1;
}
}
i = i + 1;
アルゴリズムを意識。
まず
変数iに1が入る。
for文から
1 <= 3 はtrueなので繰り返しを実行。
変数jに1が入る。
while文から
1 >= 1 かつ Sort[0] > Sort[1]
1 >= 1 はtrueで, 9 > 5 は9が大きいので交換
すると配列の中身は
[5,9,3,1]
になる。
j = 1 - 1
j = 0
内側ループに戻り
0 >= 1 で成り立たないので内側のループを抜ける。
i = i + 1
i = 2
一巡目終了。
二巡目スタート
i = 2
for文から
2 <= 3 はtureなので繰り返し実行。
変数jに2が入る。
while文から
2 >= 1 かつ Sort[1] > Sort[2]
2 >= 1はtrueで, 9 > 3 は9が大きいので交換
すると、
[5,3,9,1]
になる。
j = 2 - 1
j = 1
内側ループに戻り
1 >= 1は成り立つので、
1 >= 1 かつ Sort[0] > Sort[1]
1 >= 1はtrueで、 5 > 3 は5が大きいので交換
すると、
[3,5,9,1]
になる。
j = 1 - 1
j = 0
内側ループに戻り
0 >= 1で成り立たないので内側ループを抜ける。
i = 3
二巡目終了。
三巡目スタート
i = 3
for文から
3 <= 3はtrueなので繰り返し実行
変数jに3が入る。
while文から
3 >= 1 かつ Sort[2] > Sort[3]
3 >= 1はtrueで、9 > 1は9が大きいので交換
すると、
[3,5,1,9]
になる。
j = 3 - 1
j = 2
内側ループに戻り
2 >= 1は成り立つので、
2 >= 1 かつ Sort[1] > Sort[2]
2 >= 1はtrueで、5 > 1は5が大きいので交換
すると、
[3,1,5,9]
になる。
j = 2 - 1
j = 1
内側ループに戻り
1 >= 1は成り立つので、
1 >= 1かつSort[0] > Sort[1]
1 >= 1はtrueで、3 > 1は3が大きいので交換
すると
[1,3,5,9]
になる。
j = 1 - 1
j = 0
0 >= 1で成り立たないので内側のループを抜ける。
i = 3 + 1
i = 4
外側ループ
4 <= 3 は成り立たないので
ループを抜けて終了
コンソールを実行すると
配列の中身が小さい順に並べることができているとおもいます。
[1,3,4,6]
以上です。
今回もアルゴリズムを意識してプログラミングをしてみました。
一つ一つ値を入れて動きを確認していくことは骨の折れる作業ですがどのようにプログラムが動いているのかを理解していくためにはすごく効果的な学習方法かなと個人的には思っています。
これからも楽しみながらプログラミングしていきます!
おつかれさまでした。