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.

 Смотрите также     lfind lsearch qsort

 Пример:

 #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;
 }