C言語学習ポータル(無料版) 学習コンテンツ 関数リファレンス qsort

🔧 標準ライブラリ ・ stdlib.h ・ C89

qsort の使い方

C言語 標準ライブラリ関数リファレンス(無料公開)

書式

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

どんな関数か

配列を汎用的にソートする関数。要素の型を問わず、比較関数を関数ポインタで渡すことで任意の基準で並べ替えられる。比較関数は負・0・正を返す規約に従う必要がある。 C標準ライブラリの中では珍しくジェネリック(型に依存しない)な設計になっている代表的な関数。

使用例

#include <stdlib.h>
#include <stdio.h>
int cmp(const void *a, const void *b) {
    int x = *(const int *)a, y = *(const int *)b;
    return (x > y) - (x < y);
}
int main(void) {
    int arr[] = {3, 1, 2};
    qsort(arr, 3, sizeof(int), cmp);
    printf("%d %d %d\n", arr[0], arr[1], arr[2]);
    return 0;
}

つまずきやすい注意点

⚠️ 比較関数の引き算による実装は、大きな値同士でオーバーフローし正しく比較できないことがある。安全には(a>b)-(a<b)の形で書く。

アプリの関数リファレンスで引く(無料・登録不要) 関数一覧へ

qsort と一緒に使う関数

bsearchソート済み配列に対して二分探索を行う汎用関数。qsortと同じ比較関数を使い、対象データを高速に探索する。配列が未ソート…

同じ分類(標準ライブラリ)の関数

abort abs atexit atof atoi bsearch calloc div exit free getenv labs malloc rand realloc srand

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る