C ++ bsearch () - C ++ standartinė biblioteka

Funkcija „bsearch“ (C ++) atlieka dvejetainę elemento masyvo elemento paiešką ir grąžina elementui žymeklį, jei jis rastas.

Funkcijai „bsearch“ () reikia, kad visi jos elementai būtų mažesni nei elemento, kad būtų ieškoma kairėje jo masyvo dalyje.

Taip pat visi elementai, didesni už ieškomą elementą, turi būti jo dešinėje masyve. Šis reikalavimas įvykdomas, jei masyvas rūšiuojamas didėjimo tvarka.

bsearch () prototipas

 void * bsearch (const void * raktas, const void * bazė, size_t skaičius, size_t dydis, int (* palyginti) (const void *, const void *));

Funkcija apibrėžta antraštės faile.

Funkcija „bsearch“ () ieško rakto masyvo bazėje. Visi elementai, mažesni nei raktas, turi būti rodomi prieš jį masyvo bazėje. Taip pat visi elementai, didesni už raktą, turi būti rodomi po jo bazėje.

Norint atlikti paiešką, funkcija „bsearch“) atlieka eilę iškvietimų į funkciją, nurodytą lyginant su raktu kaip pirmu argumentu ir elementu iš masyvo kaip antruoju argumentu.

bsearch () parametrai

  • raktas: žymeklis elementui ieškoti
  • bazė: Pirmojo masyvo elemento žymeklis
  • num: masyvo elemento skaičius
  • dydis: kiekvieno masyvo elemento dydis baitais
  • palyginti: rodyklė prie funkcijos, kuri lygina du elementus. Tai grįžta
    • neigiamas sveikasis skaičius, jei pirmasis argumentas yra mažesnis nei antrasis
    • teigiamas sveikasis skaičius, jei pirmasis argumentas yra didesnis už antrąjį
    • nulis, jei abu argumentai yra vienodi

raktas perduodamas kaip pirmasis argumentas, o elementas iš masyvo - kaip antrasis argumentas. Palyginimo funkcijos prototipas atrodo taip:

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

bsearch () Grąžinimo vertė

Funkcija „bsearch“ () grąžina:

  • Rastas elementas žymeklis. Jei randama daugiau nei vienas atitinkantis elementas, nenurodoma, kurio elemento adresą funkcija grąžins kaip rezultatą.
  • Nėra rodyklės, jei elementas nerastas.

1 pavyzdys: Kaip veikia „bsearch“ () funkcija?

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

Kai paleisite programą, išvestis bus:

 10 rasta 2 pozicijoje 15 nerasta

2 pavyzdys: Kaip funkcija „bsearch ()“ veikia daugiau nei vienam atitinkančiam elementui?

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

Kai paleisite programą, galimas rezultatas bus:

 14 rasta 7 pozicijoje

Įdomios straipsniai...