第1話 並び換え
第21講では、ランダムに発生させたデータを
92,28,30,95,37
大小の順に並び換えることを学びます。
データを並び換える方法は、たくさんあります。
ライブラリ(インクルードファイル)を利用するのが、
手っ取り早い方法ですが、
学習のためには、
基本は自分の力で考えることが必要です。
ライブラリを使う方法は、
後で紹介することにしまして、
まず、自分で並び換えをしてみましょう。
私に思いつく方法は2つです。
以下、小さい順に並び換えることを前提にし、
配列
x[0]=92 x[1]=28 x[2]=30 x[3]=95 x[4]=37
を
x[0]=28 x[1]=30 x[2]=37 x[3]=92 x[4]=95
と並び直す場合の例で説明します。
1つ目の方法
5つの最大値を探します。
今の例では、
x[0]=92 x[1]=28 x[2]=30 x[3]=95 x[4]=37
次ぎに
x[3]のデータとx[4]のデータを交換して、
x[0]=92 x[1]=28 x[2]=30 x[3]=37 x[4]=95
とします。次ぎに、最大値を検索する範囲をx[0]からx[3]に絞ります。
x[0]=92 x[1]=28 x[2]=30 x[3]=37 x[4]=95
そして、その中の最大値を探します。
x[0]=92 x[1]=28 x[2]=30 x[3]=37 x[4]=95
x[0]とx[3]のデータを交換します。
x[0]=37 x[1]=28 x[2]=30 x[3]=92 x[4]=95
さらに、最大値の探索範囲を1つ絞り、
x[0]=37 x[1]=28 x[2]=30 x[3]=92 x[4]=95
x[0]からx[2]までの最大値を探します。
x[0]=37 x[1]=28 x[2]=30 x[3]=92 x[4]=95
x[0]とx[2]のデータを交換します。
x[0]=30 x[1]=28 x[2]=37 x[3]=92 x[4]=95
最大値の探索範囲を1つ絞り
x[0]=30 x[1]=28 x[2]=37 x[3]=92 x[4]=95
最大値を探します。
x[0]=30 x[1]=28 x[2]=37 x[3]=92 x[4]=95
x[0]とx[1]のデータを交換します。
x[0]=28 x[1]=30 x[2]=37 x[3]=92 x[4]=95
以上より並び換えに成功です。
要するに1回1回毎にグループの個数を絞りながら、
グループの最大値をそのグループの1番右に
もって行くことを繰り返すことによって並び換えを実現しているのです。
それでは、皆さん
を実現するプログラムを考えましょう。
条件としては、データ作成を関数fで行い、
その結果を表示関数hで表示させ、
データ並び換え関数gによって並び換え、
再びデータ表示関数hによって出力させるということにします。
さらに、2次元for文で実現するという条件を付け加えさせて頂きます。