Содержание | Глава 18

Функция bsearch

#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()
Содержание | Глава 18