次の方法で共有


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

参照

参照

検索と並べ替え

bsearch

_lsearch