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

Funkcija bsearch () v jeziku C ++ izvede binarno iskanje elementa v nizu elementov in vrne kazalec na element, če ga najde.

Funkcija bsearch () zahteva, da se v levi od polja v polju iščejo vsi elementi, manjši od elementa.

Prav tako morajo biti vsi elementi, večji od iskanega elementa, desno od njega v polju. Ta zahteva je izpolnjena, če je polje razvrščeno po naraščajočem vrstnem redu.

prototip bsearch ()

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

Funkcija je definirana v glavi datoteke.

Funkcija bsearch () išče ključ v bazi matrike. Vsi elementi, manjši od ključa, se morajo pred njim prikazati v osnovi matrike. Prav tako se morajo vsi elementi, večji od ključa, pojaviti za njim v bazi.

Da bi izvedla iskanje, funkcija bsearch () izvede niz klicev na funkcijo, na katero opozori primerjava s ključem kot prvim argumentom in elementom iz polja kot drugim argumentom.

parametri bsearch ()

  • tipka: Kazalec na element za iskanje
  • osnova: Kazalec na prvi element polja
  • num: Število elementov v matriki
  • velikost: Velikost v bajtih vsakega elementa v matriki
  • compare: Kazalec na funkcijo, ki primerja dva elementa. Vrne se
    • negativno celo število, če je prvi argument manjši od drugega
    • pozitivno celo število, če je prvi argument večji od drugega
    • nič, če sta oba argumenta enaka

Ključ se preda kot prvi argument, element iz polja pa kot drugi argument. Prototip funkcije primerjave je videti tako:

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

bsearch () Vrnjena vrednost

Funkcija bsearch () vrne:

  • Kazalec na najdeni element. Če je najdenih več kot enakovrednih elementov, potem ni določeno naslova katerega elementa bo funkcija vrnila kot rezultat.
  • Nič kazalec, če elementa ni mogoče najti.

Primer 1: Kako deluje 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; )

Ko zaženete program, bo rezultat:

 10 najdeno na položaju 2 15 ni najdeno

Primer 2: Kako funkcija bsearch () deluje za več kot en ujemajoč se element?

 #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; )

Ko zaženete program, bo možen izhod:

 14 najdeno na položaju 7

Zanimive Članki...