bsearch

並べ替えられた配列のバイナリ検索を実行します。 この関数のセキュリティが強化されたバージョンについては、「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)
);

パラメーター

key
検索するキーへのポインター。

base
検索データのベースへのポインター。

number
要素の数。

width
要素の幅。

compare
2 つの要素を比較するコールバック関数。 最初のものは検索対象のキーへのポインターで、2 番目はキーと比較する配列要素へのポインターです。

戻り値

bsearch は、 key .が指し示す配列内の baseの発生個所へのポインターを返します。 見つからない場合 key 、関数 NULLは . 配列が昇順の並べ替え順序ではない場合、または同じキーを持つ重複レコードが含まれている場合、結果は予測できません。

解説

bsearch 関数は number 要素の並べ替えられた配列のバイナリ検索を、 width バイト数の単位で実行します。 base 値は、検索対象の配列のベースへのポインターであり、 key は検索されている値です。 パラメーターは compare 、要求されたキーを配列要素と比較するユーザー指定ルーチンへのポインターです。 リレーションシップを指定する次のいずれかの値が返されます。

compare ルーチンによって返される値 説明
< 0 キーは配列要素より小さい。
0 キーは配列要素と等しい。
> 0 キーは配列要素より大きい。

この関数は、パラメーターを検証します。 の場合、または NULL0 以外の場合NULLbasenumber、または 0 以外の場合widthは、「パラメーターの検証」の説明に従って、関数は無効なパラメーター ハンドラーを呼び出します。numberkeycompare 実行の継続が許可された場合、 errnoEINVAL に設定され、関数が NULLのセキュリティが強化されたバージョンです。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

必要条件

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

互換性の詳細については、「 Compatibility」を参照してください。

このプログラムでは、qsort で文字列の配列を並べ替え、bsearch を使用して "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 );
   else
      printf( "\nCat not found!\n" );
}
cat cow dog goat horse human pig rat
cat found at 002F0F04

関連項目

検索と並べ替え
_lfind
_lsearch
qsort