C ++ bsearch () - C ++ standardraamatukogu

Funktsioon bsearch () C ++ -s teostab elemendi massiivi elemendi binaarotsingu ja tagastab elemendile osutamise, kui see on leitud.

Funktsioon bsearch () nõuab, et massiivis otsitaks sellest vasakul kõiki elemente vähem kui element.

Samamoodi peavad kõik otsitavast elemendist suuremad elemendid asuma sellest massiivis paremal. See nõue on täidetud, kui massiiv on järjestatud kasvavas järjekorras.

bsearch () prototüüp

 void * bsearch (const void * võti, const void * alus, size_t number, size_t size, int (* võrdle) (const void *, const void *));

Funktsioon on määratletud päisefailis.

Funktsioon bsearch () otsib võtit massiivi baasist. Kõik elemendid, mis on vähem kui võti, peavad selle ees olema massiivibaasis. Samamoodi peavad kõik võtmest suuremad elemendid ilmuma selle taga.

Otsingu sooritamiseks kutsub funktsioon bsearch () rea funktsioone, millele osutab võrdlus võtmega ja teise argumendina massiivi elemendiga, rea funktsioone.

bsearch () parameetrid

  • klahv: otsitava elemendi kursor
  • alus: Massiivi esimese elemendi kursor
  • num: massiivi elemendi arv
  • size: massiivi iga elemendi suurus baitides
  • Võrdle: kursor funktsiooniga, mis võrdleb kahte elementi. See naaseb
    • negatiivne täisarv, kui esimene argument on väiksem kui teine
    • positiivne täisarv, kui esimene argument on suurem kui teine
    • null, kui mõlemad argumendid on võrdsed

võti edastatakse esimese argumendina ja massiivi element edastatakse teise argumendina. Võrdlusfunktsiooni prototüüp näeb välja selline:

 int võrdlus (const void * a, const void * b);

bsearch () Tagastusväärtus

Funktsioon bsearch () tagastab:

  • Leitud elemendi osuti. Kui leitakse mitu sobivat elementi, pole täpsustatud, millise elemendi aadressi funktsioon tulemina tagastab.
  • Null kursorit, kui elementi ei leita.

Näide 1: Kuidas funktsioon bsearch () töötab?

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

Programmi käivitamisel on väljund järgmine:

 10 leitud positsioonilt 2 15 ei leitud

Näide 2: Kuidas funktsioon bsearch () töötab rohkem kui ühe sobiva elemendi puhul?

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

Programmi käivitamisel on võimalik väljund:

 14 leitud positsioonilt 7

Huvitavad Artiklid...