qsort | Programming Place Plus C言語編 標準ライブラリのリファレンス

トップページC言語編標準ライブラリのリファレンス(名前順)

トップページC言語編標準ライブラリのリファレンス(ヘッダ別)


qsort関数

概要

配列をソートする。

ヘッダ

stdlib.h

形式

void qsort(void* base, size_t count, size_t size, int (*compar)(const void* elem1, const void* elem2));

引数

base

ソート対象の配列を指すポインタ。

count

ソート対象の配列の要素数。

size

要素1つの大きさ。

compar

要素の大小関係を比較する関数(以下、比較用関数)へのポインタ。
この比較用関数は、第1引数(elem1) に渡された値が、第2引数(elem2) に渡された値よりも小さいとき 0未満の値を、同じとき 0 を、大きいとき 1以上の値を返すように定義する。比較用関数に渡される実引数は、比較対象の要素へのポインタである。

戻り値

詳細

引数base が指す配列を昇順にソートする。一般に、クイックソート(アルゴリズムとデータ構造編【整列】第6章)によって実装されるが、その保証はない。配列内の各要素の大小関係の比較のために、比較用関数を外部で定義し、この関数へのポインタを渡す。

注意

比較用関数の中で、ソート対象の配列を書き換えてはならない。

配列の中に等しい要素がある場合に、ソート後の順序関係は規定されていない。

使用例

#include <stdio.h>
#include <stdlib.h>

#define SIZE_OF_ARRAY(array)    (sizeof(array)/sizeof(array[0]))

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

int main(void)
{
    int table[] = {66, 85, 70, 92, 61, 89};
    size_t size = SIZE_OF_ARRAY(table);

    qsort(table, size, sizeof(int), compare_int);

    for (size_t i = 0; i < size; ++i) {
        printf("%d ", table[i]);
    }
    printf("\n");
}

/*
    int型による順序比較。

    引数:
        a:  比較する要素。
        b:  比較する要素。
    戻り値:
        a の方が小さいとき負数、
        b の方が小さいとき 0 より大きい値、
        a と b が同じときは 0、
         が返される。
*/
int compare_int(const void* a, const void* b)
{
    int a_num = *(int*)a;
    int b_num = *(int*)b;

    if (a_num < b_num) {
        return -1;
    }
    else if (a_num > b_num) {
        return 1;
    }
    return 0;
}

実行結果:

61 66 70 85 89 92

関連

配列のサーチのために bsearch関数がある。bsearch関数は、対象の配列がソート済みであることを要求するため、よくセットで使用される。

解説章

第38章


参考リンク


更新履歴

’2018/4/5 全体的に記述を見直して修正。

’2018/2/22 「サイズ」という表記について表現を統一。 型のサイズ(バイト数)を表しているところは「大きさ」、要素数を表しているところは「要素数」。

’2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る