CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по функциям C/C++
bsearch
bsearch
Функция Двоичный поиск в массиве. Синтаксис #include <stdlib.h> 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. Смотрите также lfind, lsearch, qsort. Пример: #include <stdlib.h> #include <stdio.h> #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; }