#include <stdlib.h> void *bsearch(const void *key, const void *buf, size_t num, size_t size, int (*compare) (const void *, const void *));
Функция bsearch() выполняет двоичный поиск в отсортированном массиве, адресуемом параметром buf, и возвращает указатель на первый член, который совпадает с искомым ключом-значением, адресуемым параметром key. Количество элементов в массиве задается параметром num, а размер (в байтах) каждого элемента — параметром size.
Для сравнения каждого элемента массива с ключом-значением используется функция, адресуемая параметром compare. Функция compare должна иметь следующее определение.
int func_name(const void *arg1, const void *arg2);
Она должна возвращать значения, описанные в следующей таблице.
Сравнение | Возвращаемое значение |
---|---|
arg1 меньше чем arg2 | Меньше нуля |
arg1 равен arg2 | Нуль |
arg1 больше чем arg2 | Больше нуля |
Массив должен быть отсортирован в порядке возрастания, чтобы по самому младшему адресу содержался наименьший элемент. Если массив не содержит искомого ключа-значения, возвращается нулевой указатель.
Следующая программа считывает вводимые с клавиатуры символы и определяет, входят ли они в алфавит:
#include <stdlib.h> #include <ctype.h> #include <stdio.h> char *alpha = "abcdefghijklmnopqrstuvwxyz"; int comp(const void *ch, const void *s); int main(void) { char ch; char *p; printf("Введите символ: "); ch = getchar(); ch = tolower(ch); p = (char *) bsearch(&ch, alpha, 26, 1, comp); if(p) printf(" %c находится в алфавите\n", *p); else printf("не входит в алфавит\n"); return 0; } /* Сравнивает два символа. */ int comp(const void *ch, const void *s) { return *(char *)ch - *(char *)s; }