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

Функцията bsearch () в C ++ извършва двоично търсене на елемент в масив от елементи и връща указател към елемента, ако бъде намерен.

Функцията bsearch () изисква всички елементи, по-малки от елемента, да бъдат търсени вляво от него в масива.

По същия начин всички елементи, по-големи от търсения елемент, трябва да бъдат вдясно от него в масива. Това изискване е изпълнено, ако масивът е сортиран във възходящ ред.

bsearch () прототип

 void * bsearch (const void * ключ, const void * base, size_t num, size_t size, int (* сравнение) (const void *, const void *));

Функцията е дефинирана в заглавния файл.

Функцията bsearch () търси ключ в основата на масива. Всички елементи, по-малки от ключ, трябва да се появят пред него в основата на масива. По същия начин всички елементи, по-големи от ключ, трябва да се появят след него в базата.

За да извърши търсенето, функцията bsearch () прави поредица от извиквания на функцията, посочена чрез сравнение с key като първи аргумент и елемент от масива като втори аргумент.

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

  • ключ: указател към елемента за търсене
  • основа: указател към първия елемент от масива
  • num: Номер на елемента в масива
  • size: Размер в байтове на всеки елемент в масива
  • сравни: указател към функция, която сравнява два елемента. Връща се
    • отрицателно цяло число, ако първият аргумент е по-малък от втория
    • положително цяло число, ако първият аргумент е по-голям от втория
    • нула, ако и двата аргумента са равни

ключ се предава като първи аргумент, а елемент от масива се предава като втори аргумент. Прототипът на функцията за сравнение изглежда така:

 int сравнение (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

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