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 elem1elem2 より小さい
0 elem1elem2 と等しい
> 0 elem1elem2 より大きい

配列は、比較関数による定義に従って、昇順で並べ替えられます。 配列を降順で並べ替えるには、比較関数の "より大きい" と "より小さい" の意味を入れ替えます。

この関数は、パラメーターを検証します。 if compare or number is NULL, or if base is NULL and is and number is zero, or if width is less than zero, the invalid parameter handler is invoked, as described in Parameter validation. 実行を続行できる場合、関数は戻り、 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

関連項目

検索と並べ替え
bsearch
_lsearch