ソート (sort、整列) とは、データをある規則に従って並び替えることをいう。例えば、英語辞書は頭文字のアルファベット順にソートされている。

また数字を小さいものから大きいものに並べることを、昇順という。例: 1, 2, 3, 4, 5。
逆に、大きいものから小さいものまでの並び方を、 降順という。例: 5, 4, 3, 2, 1。

文字になるとややこしくなる。考え方としては、文字の内部コード(コンピュータ内の文字コード、例えばアスキーコードとか)を基準にソートすることが多いが、必ずしも常識と一致しないこともあるので、ご注意を。

なお、漢字のソートとなると、読み方が複数あるので、漢字の代わりに読み方でソートすることがほとんど。ということで、実際のソートは数字以外だと、結構大変。現場のひとによく聞いて、そこのルールに従うしかないかも。

ソートのプログラムに、速度の遅いもの、複雑ですが高速なもの、動きの安定するもの、色々なアルゴリズムが考え出されている。アルゴリズムの良し悪しを考えるのにいい素材になると思う。

プログラマとして食っていくには、多くのアルゴリズムを習得しないといけないし、アルゴリズムの良し悪しをご自分で判断できることも大切。判りやすくて高速なものがあれば万万歳だが、世の中はそうはあまくない。

さて、まずは選択ソートの関数。別名 セレクションソート(Selection Sort)。

<関数名>
  selectSort —- 選択法によるソート

<形式>
  void selectSort(DATA *data, int nmem, int asdes);

<引数>
  typedef struct {
    int key;   /* 比較のキーとなるフィールド */
    int info;   /* その他のフィールド */
  } DATA;
  data  (入出力) データレコードの配列
  nmem (入力) レコード配列の大きさ
  asdes (入力) 昇順・降順別、0:昇順, 1:降順

<関数値>
  なし

<用例>
  selectSort-test.c

<関数本体>
  selectSort.c

<説明>
  選択ソートでは、まず全体を走査して最小のレコード(昇順の場合) を見つけ、それを最初のレコードと入れ換える。つぎに2つ目のレコードから最後まで走査してその中の最小のものを見つけ、2つ目のレコードと入れ換える。このように最後のレコードまで繰り返して終了。
  ご利用の際、データ構造を実際の問題に合わせて修正してほしい。

Comments are closed.

Post Navigation