Russian Belarusian English German Japanese Ukrainian

Bsearch

CuBook05

Функция

Двоичный поиск в массиве.
 
Синтаксис

#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. Заметим, что поскольку функция выполняет двоичный поиск, то первый соответствующий элемент не обязательно будет первым элементом в таблице. Функция сравнения fcmp вызывается с двумя аргументами: elem1 и elem2. Каждый аргумент указывает на сравниваемый элемент. Функция сравнения сравнивает элементы, адресуемые указателями (*elem1 и *elem2) и возвращает целое значение, зависящее от результатов сравнения.
 
Возвращаемое значение

Функция bsearch возвращает адрес первого элемента таблицы, соответствующего ключу поиска. Если такого соответствия не найдено, то возвращается значение, равное 0.
 
Переносимость

Поддерживается в системах UNIX и определена в ANSI.
 
Пример

#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;
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий