qsort
更新 : 2010 年 8 月
クイック ソートを実行します。 この関数のセキュリティが強化されたバージョンについては、「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並べ替えの要素を使用してこの配列を上書きします。
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> |
互換性の詳細についてを参照してください互換性。
使用例
// 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 );
}
同等の .NET Framework 関数
System::Collections::ArrayList::Sort
参照
参照
履歴の変更
日付 |
History |
理由 |
---|---|---|
2010 年 8 月 |
パラメーターの説明を更新および修正します。 |
カスタマー フィードバック |