並べ替えられた配列のバイナリ検索を実行します。Performs a binary search of a sorted array. この関数のセキュリティが強化されたバージョンについては、「bsearch_s」を参照してください。A more secure version of this function is available; see bsearch_s.


void *bsearch(
   const void *key,
   const void *base,
   size_t num,
   size_t width,
   int ( __cdecl *compare ) (const void *key, const void *datum)


検索するオブジェクト。Object to search for.

検索データのベースへのポインター。Pointer to base of search data.

要素の数。Number of elements.

要素の幅。Width of elements.

2 つの要素を比較するコールバック関数。Callback function that compares two elements. 最初のものは検索対象のキーへのポインターで、2 番目はキーと比較する配列要素へのポインターです。The first is a pointer to the key for the search and the second is a pointer to the array element to be compared with the key.

戻り値Return Value

bsearchの発生個所へのポインターを返しますキーが指す配列で基本します。bsearch returns a pointer to an occurrence of key in the array pointed to by base. 場合キーが見つからない、関数を返しますNULLします。If key is not found, the function returns NULL. 配列が昇順でないか、同一キーで重複するレコードがある場合、結果は予測不可能になります。If the array is not in ascending sort order or contains duplicate records with identical keys, the result is unpredictable.


Bsearch関数の並べ替え済み配列のバイナリ検索を実行するの各要素は、サイズ (バイト)。The bsearch function performs a binary search of a sorted array of number elements, each of width bytes in size. 基本値は、検索対象の配列のベースへのポインターとキー検索されている値です。The base value is a pointer to the base of the array to be searched, and key is the value being sought. 比較パラメーターを配列要素への要求されたキーを比較し、それらの関係を指定する値は次のいずれかを返しますユーザー指定のルーチンへのポインターです。The compare parameter is a pointer to a user-supplied routine that compares the requested key to an array element and returns one of the following values specifying their relationship:

によって返される値比較ルーチンValue returned by compare routine 説明Description
< 0< 0 キーは配列要素より小さい。Key is less than array element.
00 キーは配列要素と等しい。Key is equal to array element.
> 0> 0 キーは配列要素より大きい。Key is greater than array element.

この関数は、パラメーターを検証します。This function validates its parameters. 場合比較キーまたはNULL、または基本NULL0 以外の場合、または0 の場合で説明されているとおり、無効なパラメーター ハンドラーが呼び出されますパラメーターの検証です。If compare, key or number is NULL, or if base is NULL and number is nonzero, or if width is zero, the invalid parameter handler is invoked, as described in Parameter Validation. 続けるには、実行が許可された場合errnoに設定されているEINVAL、関数を返しますNULLします。If execution is allowed to continue, errno is set to EINVAL and the function returns NULL.


ルーチンによって返される値Routine 必須ヘッダーRequired header
bsearchbsearch <stdlib.h> および <search.h><stdlib.h> and <search.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.


このプログラムでは、qsort で文字列の配列を並べ替え、bsearch を使用して "cat" という単語を検索します。This program sorts a string array with qsort, and then uses bsearch to find the word "cat".

// crt_bsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( char **arg1, char **arg2 )
   /* Compare all of both strings: */
   return _strcmpi( *arg1, *arg2 );

int main( void )
   char *arr[] = {"dog", "pig", "horse", "cat", "human", "rat", "cow", "goat"};
   char **result;
   char *key = "cat";
   int i;

   /* Sort using Quicksort algorithm: */
   qsort( (void *)arr, sizeof(arr)/sizeof(arr[0]), sizeof( char * ), (int (*)(const
   void*, const void*))compare );

   for( i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i )    /* Output sorted list */
      printf( "%s ", arr[i] );

   /* Find the word "cat" using a binary search algorithm: */
   result = (char **)bsearch( (char *) &key, (char *)arr, sizeof(arr)/sizeof(arr[0]),
                              sizeof( char * ), (int (*)(const void*, const void*))compare );
   if( result )
      printf( "\n%s found at %Fp\n", *result, result );
      printf( "\nCat not found!\n" );
cat cow dog goat horse human pig rat
cat found at 002F0F04

関連項目See also

検索と並べ替えSearching and Sorting