Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог