🔧 標準ライブラリ ・ stdlib.h ・ C89
qsort の使い方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 と一緒に使う関数もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。