Cライブラリ関数 -bsearch()

C 标准库 - <stdlib.h>C標準ライブラリ - <stdlib.h>

bsearch は C 標準ライブラリ内の関数で、ソート済み配列に対して二分探索を実行するために使用され、その定義は stdlib.h ヘッダーファイルにあります。

Cライブラリ関数void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))に対してnitemsオブジェクトの配列に対して二分探索を実行します。base検索する配列へのポインタ。key検索する要素へのポインタ。size配列内の各要素のサイズを指定します。

配列の内容はcompar対応する比較関数に従って昇順にソートされている必要があります。

宣言

以下は bsearch() 関数の宣言です。

void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

引数

  • key:検索対象の要素へのポインタ。
  • base:配列の先頭位置へのポインタ。
  • nmemb:配列内の要素数。
  • size:各要素のサイズ(バイト単位)。
  • compar:2つの要素を比較する比較関数へのポインタ。

戻り値

  • 一致する要素が見つかった場合、bsearchその要素へのポインタを返します。
  • 一致する要素が見つからない場合、bsearch返します。NULL。

比較関数

比較関数は次のシグネチャに準拠する必要があります:

int compar(const void *a, const void *b);

関数は次を返します:

  • 負の値(もしaより小さい場合)b。
  • ゼロ(もしaと等しい場合)b。
  • 正の値(もしaより大きい場合)b。

例

以下の例は、bsearch() 関数の使用方法を示しています。

例

#include <stdio.h> #include <stdlib.h> // bsearch 検索用の比較関数 int cmpfunc(const void * a, const void * b) { return (*(int*)a - *(int*)b); } int main() { int values[] = { 5, 20, 29, 32, 63 }; int key = 32; int *item; // 配列の長さを計算 size_t array_size = sizeof(values) / sizeof(values[0]); // bsearch を使用して配列内の値 32 を検索 item = (int*) bsearch(&key, values, array_size, sizeof(int), cmpfunc); // 検索結果を確認して出力 if (item != NULL) { printf("Found item = %d\n", *item); } else { printf("Item = %d could not be found\n", key); } return 0; }

上記のプログラムをコンパイルして実行すると、次の結果が得られます:

Found item = 32

C 标准库 - <stdlib.h>C標準ライブラリ - <stdlib.h>

その他の拡張