Bsearch
bsearch
Функция Двоичный поиск в массиве.
Синтаксис #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.
Смотрите также
Пример:
#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; }