次の方法で共有


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 より大きい

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

この関数は、パラメーターを検証します。 compareまたはnumberNULLされている場合、またはbaseNULLnumberが 0 以外の場合、またはwidthが 0 未満の場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行を続行できる場合、関数は戻り、 errnoEINVALに設定されます。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「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