並べ替えは、プログラミングを学ぶ人なら誰もが身につけるべき基本です。多くのデータ処理がこれに依存しているからです。多くのプログラミング言語では並べ替えの関数が組み込まれていて、開発者が手軽に使えるようになっています。しかし、C++ にも組み込みの並べ替え関数があることは、あまり知られていないのではないでしょうか!

C++ の組み込み並べ替え関数は「algorithm」ヘッダーに含まれています。標準規格の一部なので、プラットフォームを問わず使えます。また、この関数は戻り値がありません。渡したデータをそのまま並べ替えて、元の変数に結果が残ります。

使う前に、algorithm ヘッダーを読み込んでおいてください。

sort 関数の書式:

sort(array_begin,array_end);

array_begin は並べ替えを始める位置、array_end は並べ替えの終わりの位置です。この説明だけではわかりにくいですよね。例として、要素数 8 の配列全体を並べ替えたい場合を考えます。

int x[8]={1,3,5,2,4,6,9,0};

上の行で配列 x を宣言しています。次に:

sort(x,x+8);

上の行は、もっとも簡単な並べ替えの書き方です。配列 x の先頭から末尾までを並べ替える、という意味です。このとき x の中身は {0,1,2,3,4,5,6,9} になります。

では、x の先頭 4 つだけを並べ替えたい場合はどうでしょうか。

sort(x,x+4);

並べ替え前:x={1,3,5,2,4,6,9,0}、並べ替え後:x={1,2,3,5,4,6,9,0}

この並べ替えが影響するのは 1〜4 番目だけで、5〜8 番目は変わらない点に注意してください。

sort() は、既定では昇順(小さい順)に並べ替えます。降順(大きい順)にしたい場合はどうすればよいでしょうか。これも簡単で、reverse で配列を反転させればよいのです。

reverse の書式は sort と似ていて、こちらも戻り値はありません。

reverse の書式:

reverse(array_begin,array_end);

引数については改めて説明しません。さっそく例を見ていきましょう:

int x[8]={1,3,5,2,4,6,9,0};
sort(x,x+8);

このとき x={0,1,2,3,4,5,6,9} で、これは昇順です。次に reverse で降順に変えます:

reverse(x,x+8);

このとき x={9,6,5,4,3,2,1,0} になります。

ここまでの例はすべて、x と x+8 で始点と終点を直接指定しています。しかし実際にプログラムを書くときは、配列の長さがあらかじめわからないことがよくあります。そのような場合はどうすればよいのでしょうか。ここまでの書き方はわかりやすさを優先したため、厳密には正しくありません。以下が本当に良い書き方です!

正しい書き方のヒント:sizeof で配列の長さを計算する

例:

int x[8]={1,3,5,2,4,6,9,0};
int x_end=sizeof(x)/sizeof(int);
sort(x,x+x_end);

上のコードでは sizeof を使って配列の長さを取得しています。この方法はよく使われるので、ぜひ覚えておいてください! sizeof() は変数が占めるメモリのバイト数を返します。その値を要素の型のサイズで割ると、配列の長さが得られます。

完全なサンプルコード:

完全なサンプルのダウンロード:Box.net|4Shared|Google|Dropbox