qsort
更新 : 2007 年 11 月
クイック ソートを実行します。この関数のセキュリティが強化されたバージョンについては、「qsort_s」を参照してください。
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
パラメータ
base
並べ替える配列の先頭。num
配列の要素数。width
配列の要素のサイズ (バイト数)。compare
比較関数。最初のパラメータは検索キーへのポインタで、2 番目のパラメータはキーと比較される配列要素へのポインタです。
解説
qsort 関数は、width に指定したバイト数の要素 num 個から成る配列を並べ替えるためのクイック ソート アルゴリズムを実装します。base 引数は、並べ替える配列のベースへのポインタです。qsort 関数は、並べ替えた後の要素で、この配列を上書きします。引数 compare は、2 つの配列要素を比較し、両者の関係を示す値を返すユーザー指定ルーチンへのポインタです。qsort 関数は、並べ替えの間に次の compare ルーチンを 1 回または複数回呼び出し、そのたびに 2 つの配列要素へのポインタを渡します。
compare( (void *) & elem1, (void *) & elem2 );
このルーチンは、要素を比較し、次のいずれかの値を返します。
比較関数の戻り値 |
説明 |
---|---|
< 0 |
elem1 は elem2 より小さい |
0 |
elem1 は elem2 に等しい |
> 0 |
elem1 は elem2 より大きい |
配列は、比較関数による定義に従って、昇順で並べ替えられます。配列を降順で並べ替えるには、比較関数の "より大きい" と "より小さい" の意味を入れ替えます。
この関数は、パラメータを検証します。compare または num が NULL の場合、base が NULL で *num が 0 以外の値の場合、あるいは width が 0 より小さい場合は、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、関数が戻り、errno は EINVAL に設定されます。
必要条件
ルーチン |
必須ヘッダー |
---|---|
qsort |
<stdlib.h> および <search.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_qsort.c
// arguments: every good boy deserves favor
/* This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int compare( const void *arg1, const void *arg2 );
int main( int argc, char **argv )
{
int i;
/* Eliminate argv[0] from sort: */
argv++;
argc--;
/* Sort remaining args using Quicksort algorithm: */
qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );
/* Output sorted list: */
for( i = 0; i < argc; ++i )
printf( " %s", argv[i] );
printf( "\n" );
}
int compare( const void *arg1, const void *arg2 )
{
/* Compare all of both strings: */
return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}
boy deserves every favor good
.NET Framework の相当するアイテム
System::Collections::ArrayList::Sort