C ++ bsearch () - Стандартная библиотека C ++

Функция bsearch () в C ++ выполняет двоичный поиск элемента в массиве элементов и возвращает указатель на элемент, если он найден.

Функция bsearch () требует, чтобы в массиве выполнялся поиск всех элементов, меньших, чем элемент, находящийся слева от него.

Точно так же все элементы, которые больше искомого, должны находиться справа от него в массиве. Это требование выполняется, если массив отсортирован по возрастанию.

bsearch () прототип

 void * bsearch (const void * key, const void * base, size_t num, size_t size, int (* compare) (const void *, const void *));

Функция определена в заголовочном файле.

Функция bsearch () ищет ключ в базе массива. Все элементы, меньшие чем key, должны стоять перед ним в базе массива. Точно так же все элементы больше, чем key, должны появляться после него в базе.

Для выполнения поиска функция bsearch () выполняет серию вызовов функции, на которую указывает compare с ключом в качестве первого аргумента и элементом из массива в качестве второго аргумента.

Параметры bsearch ()

  • ключ: указатель на элемент для поиска
  • base: указатель на первый элемент массива
  • num: номер элемента в массиве
  • size: Размер в байтах каждого элемента в массиве
  • compare: указатель на функцию, сравнивающую два элемента. Он возвращается
    • отрицательное целое число, если первый аргумент меньше второго
    • положительное целое число, если первый аргумент больше второго
    • ноль, если оба аргумента равны

key передается как первый аргумент, а элемент из массива передается как второй аргумент. Прототип функции сравнения выглядит так:

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

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

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

  • Указатель на найденный элемент. Если найдено более одного совпадающего элемента, то не указано, адрес какого элемента функция вернет в качестве результата.
  • Нулевой указатель, если элемент не найден.

Пример 1: Как работает функция bsearch ()?

 #include #include using namespace std; int compare(const void* a, const void* b) ( const int* x = (int*) a; const int* y = (int*) b; return (*x - *y); ) int main() ( const int num = 10; int arr(num) = (5,9,10,14,16,19,21,26,29,31); int key1 = 10; int *p1 = (int*)bsearch(&key1,arr,num,sizeof(int),compare); if(p1 == NULL) cout << key1 << " not found " << endl; else cout << key1 << " found at position " << (p1-arr) << endl; int key2 = 15; int *p2 = (int*)bsearch(&key2,arr,num,sizeof(int),compare); if(p2 == NULL) cout << key2 << " not found " << endl; else cout << key2 << " found at position " << (p2-arr) << endl; return 0; )

Когда вы запустите программу, вывод будет:

 10 найдено в позиции 2 15 не найдено

Пример 2: Как функция bsearch () работает более чем с одним совпадающим элементом?

 #include #include using namespace std; int compare(const void* a, const void* b) ( const int* x = (int*) a; const int* y = (int*) b; return (*x - *y); ) int main() ( const int num = 10; int arr(num) = (2,3,5,7,8,10,14,14,14,15); int key = 14; int *p = (int*)bsearch(&key,arr,num,sizeof(int),compare); if(p == NULL) cout << key << " not found " << endl; else /* 14 occurs at position 6,7 and 8*/ cout << key << " found at position " << (p-arr) << endl; return 0; )

Когда вы запустите программу, возможный результат будет:

 14 находится в позиции 7

Интересные статьи...