qsort
stdlib.h:インデックス への移動
ヘッダーファイル
stdlib.h
カテゴリ
メモリと文字列の操作ルーチン
プロトタイプ
void qsort(void *base, size_t nelem, size_t width, int (_USERENTRY *fcmp)(const void *, const void *));
説明
クイックソートアルゴリズムを使ってソートします。
qsort は,「3 つの値の中央値」バージョンのクイックソートアルゴリズムを実装します。qsort は,fcmp が指すユーザー定義の比較関数を繰り返し呼び出して,テーブル内のエントリを整列します。
- base は,整列するテーブルのベース(0 番めの要素)へのポインタです。
- nelem は,テーブル内のエントリの数です。
- width は,テーブル内の各エントリのサイズ(バイト単位)です。
比較関数 fcmp では,_USERENTRY 呼び出し規約を使用する必要があります。
- fcmp は,elem1 と elem2 の 2 つの引数を受け取ります。これらは,テーブル内のエントリへのポインタです。この比較関数は,示された各項目(*elem1 と *elem2)を比較し,比較の結果に基づいて整数を返します。
- *elem1 < *elem2 fcmp は負の整数を返します。
- *elem1 == *elem2 fcmp は 0 を返します
- *elem1 > *elem2 fcmp は正の整数を返します。
この比較で,小なり記号(<)は,整列後の最終的なシーケンスで,左側の要素が右側の要素より前に置かれることを意味します。同様に,大なり記号(>)は,整列後の最終的なシーケンスで,左側の要素が右側の要素より後に置かれることを意味します。
戻り値
なし。
例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };
int main(void)
{
int x;
qsort((void *)list, 5, sizeof(list[0]), sort_function);
for (x = 0; x < 5; x++)
printf("%s\n", list[x]);
return 0;
}
int sort_function( const void *a, const void *b)
{
return( strcmp((char *)a,(char *)b) );
}
移植性
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |
+ |
+ |