Funkcija bsearch () u C ++-u izvodi binarno pretraživanje elementa u nizu elemenata i vraća pokazivač na element ako je pronađen.
Funkcija bsearch () zahtijeva da se svi elementi manje od elementa pretražuju lijevo od njega u polju.
Isto tako, svi elementi veći od elementa koji se pretražuje moraju biti desno od njega u polju. Ovaj je zahtjev ispunjen ako je niz sortiran u rastućem redoslijedu.
prototip bsearch ()
void * bsearch (const void * key, const void * base, size_t num, size_t size, int (* usporedi) (const void *, const void *));
Funkcija je definirana u zaglavnoj datoteci.
Funkcija bsearch () traži ključ u bazi niza. Svi elementi manji od ključa moraju se pojaviti prije njega u bazi niza. Isto tako, svi elementi veći od ključa moraju se pojaviti nakon njega u bazi.
Da bi izvršila pretragu, funkcija bsearch () upućuje niz poziva funkciji na koju je ukazano usporedivo s key kao prvim argumentom i elementom iz niza kao drugim argumentom.
bsearch () parametri
- tipka: pokazivač na element za pretraživanje
- baza: Pokazivač na prvi element niza
- num: Broj elementa u polju
- veličina: veličina u bajtovima svakog elementa u polju
- usporedi: pokazivač na funkciju koja uspoređuje dva elementa. Vraća se
- negativan cijeli broj ako je prvi argument manji od drugog
- pozitivan cijeli broj ako je prvi argument veći od drugog
- nula ako su oba argumenta jednaka
Ključ se prenosi kao prvi argument, a element iz niza kao drugi argument. Prototip funkcije usporedbe izgleda ovako:
int usporedi (const void * a, const void * b);
bsearch () Povratna vrijednost
Funkcija bsearch () vraća:
- Pokazivač na pronađeni element. Ako se pronađe više podudarnih elemenata, tada nije određeno koja će adresa elementa funkcija vratiti kao rezultat.
- Nulti pokazivač ako element nije pronađen.
Primjer 1: Kako funkcionira funkcija 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; )
Kada pokrenete program, izlaz će biti:
10 pronađeno na položaju 2 15 nije pronađeno
Primjer 2: Kako funkcija bsearch () radi za više od jednog odgovarajućeg elementa?
#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; )
Kada pokrenete program, mogući izlaz bit će:
14 pronađeno na položaju 7