C ++ bsearch () - C ++ standardna knjižnica

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

Zanimljivi članci...