Функция Двоичный поиск в массиве.
Синтаксис #include
void * bsearch(const void * key, const void * base,
size_t nelem, size_t width,
int (*fcmp) (const void *, const void *));
Файл, содержащий stdlib.h
прототип
Описание bsearch осуществляет поиск по таблице (массиву) из
элементов nelem и возвращает адрес первого элемента
в таблице, который соответствует шаблону поиска.
Если соответствие не найдено, то bsearch возвращает
значение, равное 0.
Тип size_t определяется как unsigned int.
- nelem задает количество элементов таблицы;
- width задает количество байтов в каждом элементе
таблицы.
Функция сравнения fcmp вызывается с двумя аргу-
ментами: elem1 и elem2. Каждый аргумент указывает
на сравниваемый элемент. Функция сравнения срав-
нивает элементы, адресуемые указателями (*elem1 и
*elem2) и возвращает целое значение, зависящее от
результатов сравнения.
Для bsearch *fcmp возвращает следующее значение:
< 0 *elem1 < *elem2
==0 *elem1 == *elem2
> 0 *elem1 > *elem2
Возвращаемое bsearch возвращает адрес первого элемента таблицы,
значение соответствующего ключу поиска. Если такого соот-
ветствия не найдено, то возвращается значение,
равное 0.
Переносимость Поддерживается в системах UNIX и определена в
ANSI C.
Смотрите также lfindlsearchqsort
Пример:
#include
#include
#define NELEMS(arr) (sizeof(arr) / sizeoff(arr[0]))
int numarray[] = {123, 145, 512, 627, 800, 993};
int numeric(int *pl, int *p2)
{
return(*p1 - *p2);
}
int lookup(int key)
{
int *itemptr;
/* явное преобразование
необходимо для исключения ошибки несовпадения типов, воз-
никающей во время компиляции */
itemptr = bsearch(&key, numarray, NELEMS(numarray),
sizeof(int), (int (*)(const void *,const void *))numeric);
return (itemptr != NULL);
}
int main(void)
{
if(lookup(512))
printf("В таблице есть элемент 512\n");
else
printf("В таблице нет элемента 512\n");
return 0;
}