Cライブラリ関数 -bsearch()
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>