次の方法で共有


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

参照

参照

検索と並べ替え

bsearch

_lsearch

履歴の変更

日付

History

理由

2010 年 8 月

パラメーターの説明を更新および修正します。

カスタマー フィードバック