Функция библиотеки C -bsearch()

Стандартная библиотека C - <stdlib.h>

bsearch — это функция в стандартной библиотеке C, используемая для выполнения двоичного поиска в отсортированном массиве. Её определение находится в заголовочном файле stdlib.h.

Функции библиотеки Cvoid *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))ПараnitemsВыполняет двоичный поиск в массиве объектов,baseУказывает на массив, в котором выполняется поиск,keyУказывает на элемент, который нужно найти,sizeЗадаёт размер каждого элемента в массиве.

Содержимое массива должно быть отсортировано в порядке возрастания в соответствии сcomparсоответствующей функцией сравнения.

Объявление

Ниже приведено объявление функции bsearch().

void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));

Параметр

  • key: Указатель на искомый элемент.
  • base: Указатель на начальную позицию массива.
  • nmemb: Количество элементов в массиве.
  • size: Размер каждого элемента (в байтах).
  • compar: Указатель на функцию сравнения, которая используется для сравнения двух элементов.

Возвращаемое значение

  • Если совпадающий элемент найден,bsearchвозвращает указатель на этот элемент.
  • Если совпадающий элемент не найден,bsearchreturnNULL。

Функция сравнения

Функция сравнения должна соответствовать следующей сигнатуре:

int compar(const void *a, const void *b);

Функция возвращает:

  • Отрицательное значение, еслиaзнак меньшеb。
  • Ноль, еслиaequalsb。
  • Положительное значение, еслиaзнак большеb。

Пример

В следующем примере демонстрируется использование функции bsearch().

Пример

#include <stdio.h> #include <stdlib.h> // Функция сравнения, используемая для поиска с помощью bsearch int cmpfunc(const void * a, const void * b) { return (*(int*)a - *(int*)b); } int main() { int values[] = { 5, 20, 29, 32, 63 }; int key = 32; int *item; // Вычислить длину массива size_t array_size = sizeof(values) / sizeof(values[0]); // Использовать bsearch для поиска значения 32 в массиве item = (int*) bsearch(&key, values, array_size, sizeof(int), cmpfunc); // Проверить результат поиска и вывести его if (item != NULL) { printf("Найденный элемент = %d\n", *item); } else { printf("Элемент = %d не найден\n", key); } return 0; }

Давайте скомпилируем и запустим приведённую выше программу, которая выдаст следующий результат:

Found item = 32

Стандартная библиотека C - <stdlib.h>

Другие расширения