名前空間
変種
操作

std::qsort

提供: cppreference.com
< cpp‎ | algorithm
 
 
アルゴリズムライブラリ
実行ポリシー (C++17)
非変更シーケンス操作
(C++11)(C++11)(C++11)
(C++17)
変更シーケンス操作
未初期化記憶域の操作
分割操作
ソート操作
(C++11)
二分探索操作
集合操作 (ソート済み範囲用)
ヒープ操作
(C++11)
最小/最大演算
(C++11)
(C++17)
順列
数値演算
C のライブラリ
qsort
 
ヘッダ <cstdlib> で定義
void qsort( void *ptr, std::size_t count, std::size_t size, /*compare-pred*/* comp );
void qsort( void *ptr, std::size_t count, std::size_t size, /*c-compare-pred*/* comp );
(1)
extern "C++" using /*compare-pred*/ = int(const void*, const void*); // exposition-only
extern "C" using /*c-compare-pred*/ = int(const void*, const void*); // exposition-only
(2)

指定された ptr の指す配列を昇順にソートします。 配列は size バイトの要素を count 個持ちます。 comp の指す関数はオブジェクトの比較のために使用されます。

comp が2つの要素を同等であると示した場合、それらの順序は未規定です。

目次

[編集] 引数

ptr - ソートする配列を指すポインタ
count - 配列の要素数
size - 配列の各要素のバイト単位のサイズ
comp - 第1引数が第2引数より小さい場合は負の整数値、第1引数が第2引数より大きい場合は正の整数値、第1引数が第2引数と等しい場合はゼロを返す比較関数。

比較関数のシグネチャは以下と同等であるべきです。

 int cmp(const void *a, const void *b);

関数は渡されたオブジェクトを変更してはならず、同じオブジェクトに対してはその配列内の位置にかかわらず一貫した結果を返さなければなりません。

[編集] 戻り値

(なし)

[編集] ノート

その名前にもかかわらず、 C++、 C および POSIX 標準はこの関数がクイックソートを用いて実装されることも、計算量や安定性のいかなる保証も、要求していません。

配列の要素の型は TrivialType でなければならず、そうでなければ動作は未定義です。

引数 comp の型が異なるため (言語リンケージは型の一部です)、 C++ 標準ライブラリが提供する2つのオーバーロードは異なります。

[編集]

以下のコードは qsort() を使用して整数の配列をソートします。

#include <iostream>
#include <cstdlib>
#include <climits>
 
int main()
{
    int a[] = {-2, 99, 0, -743, 2, INT_MIN, 4};
    constexpr std::size_t size = sizeof a / sizeof *a;
 
    std::qsort(a, size, sizeof *a, [](const void* a, const void* b)
    {
        int arg1 = *static_cast<const int*>(a);
        int arg2 = *static_cast<const int*>(b);
 
        if(arg1 < arg2) return -1;
        if(arg1 > arg2) return 1;
        return 0;
 
    //  return (arg1 > arg2) - (arg1 < arg2); // possible shortcut
    //  return arg1 - arg2; // erroneous shortcut (fails if INT_MIN is present)
    });
 
    for(int ai : a)
        std::cout << ai << ' ';
}

出力:

-2147483648 -743 -2 0 2 4 99

[編集] 関連項目

不特定な型の要素を指定の配列から探します
(関数) [edit]
指定範囲を昇順にソートします
(関数テンプレート) [edit]
型がトリビアルかどうか調べます
(クラステンプレート) [edit]