#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;
}
Зависимые функции
qsort()