## 14.2 ソートアルゴリズム

> 注 : 以降の節で説明するプログラム例は、組み合わされて alg7.cpp ファイルに含まれています。 第 13 章と同様に、ここで説明するプログラムでは出力文が省略されています。 全ての出力文はプログラムファイルに付属しています。

標準 C++ ライブラリには、次のように定義される 2 つの基本ソートアルゴリズムがあります。

    void sort (RandomAccessIterator first,
          RandomAccessIterator last [, Compare ] );

    void stable_sort (RandomAccessIterator first,
          RandomAccessIterator last [, Compare ] );

`sort()` アルゴリズムの方が多少高速ですが、元のシーケンス内の等価要素が、最終結果でもその相対順序を保持することは保証されません。順序が重要な場合は、`stable_sort()` バージョンを使用してください。

これらのアルゴリズムはランダムアクセス反復子を必要とするため、vector、deque、および通常の C ポインタにのみ使用することができます。ただし、list コンテナには独自の `sort()` メンバー関数があることに留意してください。

デフォルトの演算子 `<` が不適切な場合は、比較演算子を明示的に指定することができます。この明示的比較演算子は、list を昇順ではなく降順にソートするプログラム例に使用されています。コレクション全体を逆方向にソートする代替方法として、逆方向反復子を使用してシーケンスを定義する方法があります。

> 注 : もうひとつのソートアルゴリズムは、14.8 節で説明するヒープ演算によって提供されます。

以下のプログラム例は、vector に適用される `sort()` アルゴリズムと、明示的比較演算子を使用して deque に適用される `sort()` アルゴリズムを説明しています。

    void sort_example ()
       // ソートアルゴリズムの使用方法を説明する
       // 完全なソースコードについては alg7.cpp を参照
    {
          // vector と deque に
          // 乱数を入力する
       vector<int> aVec(15);
       deque<int> aDec(15);
       generate (aVec.begin(), aVec.end(), randomValue);
       generate (aDec.begin(), aDec.end(), randomValue);

          // vector を昇順にソートする
       sort (aVec.begin(), aVec.end());

          // deque を降順にソートする
       sort (aDec.begin(), aDec.end(), greater<int>() );

          // 降順ソートの代替方法
       sort (aVec.rbegin(), aVec.rend());
    }

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月