qsort
クイック ソートを実行します。 この関数のセキュリティが強化されたバージョンについては、「qsort_s
」を参照してください。
構文
void qsort(
void *base,
size_t number,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
パラメーター
base
対象となる配列の先頭。
number
配列サイズ (要素数)。
width
要素のサイズ (バイト単位)。
compare
2 つの配列要素を比較してそれらの関係を指定する値を返すユーザー指定のルーチンへのポインターです。
解説
qsort
関数は、それぞれが width
バイトの number
要素から成る配列を並べ替えるためのクイック ソート アルゴリズムを実装します。 引数 base
は、並べ替える配列のベースへのポインターです。 qsort
は、並べ替えた要素を使用して、この配列を上書きします。
qsort
は並べ替え中に compare
ルーチンを 1 回または複数回呼び出し、各呼び出しにおいて 2 つの配列要素へのポインターを渡します。 compare
で 2 つの要素が同じであることが示される場合、結果の並べ替えられた配列内のそれらの順序は指定されません。
compare(const void *elem1, const void *elem2);
ルーチンは、要素を比較し、次の値のいずれかを返します。
関数の戻り値の比較 | 説明 |
---|---|
< 0 | elem1 が elem2 より小さい |
0 | elem1 が elem2 と等しい |
> 0 | elem1 が elem2 より大きい |
配列は、比較関数による定義に従って、昇順で並べ替えられます。 配列を降順で並べ替えるには、比較関数の "より大きい" と "より小さい" の意味を入れ替えます。
この関数は、パラメーターを検証します。 compare
またはnumber
がNULL
されている場合、またはbase
がNULL
でnumber
が 0 以外の場合、またはwidth
が 0 未満の場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行を続行できる場合、関数は戻り、 errno
は EINVAL
に設定されます。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
qsort |
<stdlib.h> および <search.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
// 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