😸

[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は見つからなかった
脚注
  1. 昇順または降順ソート済み配列でしか使えない。比較関数が必要。 ↩︎

  2. 改行やタブなど、画面に表示されない制御文字のこと。 ↩︎

Discussion