第12講 並び替えの方法その1
第1話 並び替えをするには? 
第12講と後の2講で、並び替えを考えます。
この3講で扱う並び替えの方法は4つです。
Ⅰ 隣同士の交換を繰り返す方法 これを「隣項交換繰り返し法」と名付けます。
Ⅱ 最大値(最小値)を求めては表示し、それを対象から外して同じことを繰り返す方法 これを「最大値排除繰り返し法」と呼ぶことにします。
Ⅲ setによる方法
Ⅳ sortによる方法
の4つです。Ⅰは第12講で、Ⅱは第13講で,ⅢⅣは第14講で見ていきます。
ですからこの講の主題は、隣同士を交換する方=隣項交換繰り返し法について考えることです。

例えば、次のランダムなデータを降順(大きい順)に並び替えるにはどうしたらよいでしょうか。
8,6,10,4,9
隣同士のデータを比較して、もし右側のデータの方が大きければ交換します。
第1データと第2データの比較、
第2データと第3データの比較、
第4データと第5データの比較
と進めます。
順を追ってみましょう。
8,6,10,4,9
8,6,10,4,9
8,10,6,4,9
8,
10,6,4,9
8,10,
6,4,9
8,10,6,9,4
これで一巡しました。
再度同じことを繰り返します。
8,10,6,
9,4
10,8,6,9,4
10,8,6,9,4
10,
8,6,9,4
10,8,
9,6,4
10,8,
9,6,4
2巡目で降順に並び替えるのに成功しました。

次の場合どうでしょうか。
4,9,3,8,10
動きを追ってみましょう。
4,9,3,8,10
9,4,3,8,10
9,4,3,8,10
9,4,3,8,10
9,4,8,3,10
9,4,
8,3,10
9,4,8,10,3
1巡目が終わりです。
9,4,8,
10,3
9,4,8,10,3
9,8,4,10,3
9,
8,4,10,3
9,8,10,4,3
9,8,
10,4,3
2巡目が終了しましたが、まだ降順になっていません。
3巡目に入ります。
9,8,10,
4,3
9,8,10,4,3
9,10,8,4,3
9,
10,8,4,3
9,10,
8,4,3
3巡目終了時にもまだ、降順になっていません。
9,10,8
,4,3
10,9,8,4,3
10,9,8,4,3
10,9,8,4,3
10,9,8,4,3
4巡目で降順に並び替えるのに成功しました。

そこで、次の仮説を立ててみたいと思います。
データ数がnの場合(n-1)巡目以内で並び替えに成功すると。
この仮説に基づいて並び替えプログラムを考えましょう。
関数fでランダムデータを発生させて、
関数gで並び替えることにしましょう。
もちろん、Integer.parseInt(変数名.readLine());

第5講 for文を理解しよう
  第3話 キーボードから値を取得する
を参照してください。

を使い、データ数については、キーボードから入力できるようにしましょう。
Java
さて、このようにランダムデータを発生させる関数fと降順に並び替える関数gを考え、
データは前話の配列を関数に送るを参考に考えましょう、
といいたいところですが、
初心者のために事前準備課題がもう一つ必要です。

それは、
a=1;
b=2;
のデータを交換するにはどうしたらよいでしょうか。





第11講第7話へ 第2話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部