目次> 第13章> 13.1 TOPUPPREVNEXT

13.1 配列に読込んだデータの整列

これまで学習してきたことを組み合わせると、 配列内のデータの整列ができます。
整数型の配列 vdata の先頭からデータが格納されていて、 データの個数は整数型の変数 num に入っているとします。整列した結果も同じ vdata に格納することにしましょう。
しつこく言いますが、vdata[0] から vdata[num-1] にデータが入っています。

<アルゴリズム>

  1. 変数 sfrom を定義し、整列する領域の先頭を指すことにする
    すなわち、 vdata の sfrom 番目から、 num−1 番目までの データが、まだ整列されていないとする。
  2. sfrom の初期値を 0 にする
  3. vdata の sfrom 番目から、 num−1 番目のなかで 最小値を探す。
    いままでは、「最小の値」を探したが、今回は最小の値が格納されている 場所を憶えておく。
  4. 最小の値 と sfrom 番目のデータを入れ替える。
  5. ここまでで、vdataの 0番目から sfrom番目まで、 小さい順に並んだので、 sfromの値を1だけ増やす。
  6. sfromの値が、num−1 に等しければ、全体の整列が完了
    そうでなければ、上記の手順 3.から繰り返す

上記の手順の 1. 2. 5. 6. の部分で、for文が構成されます。

    for ( int sfrom=0; sfrom<num; sfrom++ ) {
           手順 3.
           手順 4. 
     }

手順3は、

という手順になります。プログラムにすると、次のようになります。

    int minindex = sfrom;
    for ( int i=sfrom+1; i<num; i++ ) {
           if( vdata[i] < vdata[minindex] ) minindex = i;
     }

手順4もちょっとした工夫がいります。変数に新しい値を代入した瞬間に 旧いデータは消えてしまいますから、旧い値をちょっとだけ憶えておく temparea という変数を定義します。

    int temparea    = vdata[minindex];
    vdata[minindex] = vdata[sfrom];
    vdata[sfrom]    = temparea;

あとは、これらをドーンと組み合わせて書くだけです。
次節へ。


更新日:2004-12-18 TOPUPPREVNEXT