😸
[C] bsearch 関数
機能
配列の中から指定した値を二分探索法で高速に検索し、そのポインタを返す標準ライブラリ関数[1]
使用例
42が見つかった:42
と表示する
\n
は改行を表す エスケープシーケンス[2]
コード
// 配列に42が含まれているかbsearchで調べ、見つけたら値を表示
int array[] = {10, 21, 32, 42, 55, 68}; // ※ソート済み
int key = 42;
int *p = bsearch(&key, array, 6, sizeof(int), cmp);
if (p != NULL) {
printf("%dが見つかった:%d\n", key, *p);
} else {
printf("%dは見つからなかった\n", key);
}
全文
#include <stdio.h>
#include <stdlib.h>
// 比較関数
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
void main() {
int array[] = {10, 21, 32, 42, 55, 68};
int key = 42;
int *p = bsearch(&key, array, 6, sizeof(int), cmp);
if (p != NULL) {
printf("%dが見つかった:%d\n", key, *p);
} else {
printf("%dは見つからなかった\n", key);
}
}
実行結果
42が見つかった:42
100は見つからなかった
を変数から表示する
コード
int key = 100;
int *p = bsearch(&key, array, 6, sizeof(int), cmp);
if (p != NULL) {
printf("%dが見つかった:%d\n", key, *p);
} else {
printf("%dは見つからなかった\n", key);
}
全文
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b;
}
void main() {
int array[] = {10, 21, 32, 42, 55, 68};
int key = 100;
int *p = bsearch(&key, array, 6, sizeof(int), cmp);
if (p != NULL) {
printf("%dが見つかった:%d\n", key, *p);
} else {
printf("%dは見つからなかった\n", key);
}
}
実行結果
100は見つからなかった
Discussion