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

例えば、次のランダムなデータを降順(大きい順)に並び替えるにはどうしたらよいでしょうか。
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で並び替えることにしましょう。
もちろん、scanfを使い、データ数については、キーボードから入力できるようにしましょう。
並び替え
さて、このようにランダムデータを発生させる関数fと降順に並び替える関数gを考えましょう。
そして、mainにおいては処理時間を計測できるようにしてください。
条件として、今回はグローバル変数またはグローバル配列は使わず、ポインタのアドレスを送るという方法で
ポインタ(実質1次元配列)を操作してください。


第20講第8話へ 第2話へ

戻る

C言語 C++講義第1部へ
VB講義へ
VB講義基礎へ

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