C ++ bsearch () - C ++ Standart Kitaplığı

C ++ 'daki bsearch () işlevi, bir öğe dizisindeki bir öğenin ikili aramasını gerçekleştirir ve bulunursa öğeye bir işaretçi döndürür.

Bsearch () işlevi, öğeden daha küçük tüm öğelerin dizide solunda aranmasını gerektirir.

Aynı şekilde, aranacak elemandan büyük olan tüm elemanlar, dizide onun sağında olmalıdır. Dizi artan sırada sıralanırsa bu gereksinim yerine getirilir.

bsearch () prototipi

 void * bsearch (const void * key, const void * base, size_t num, size_t size, int (* karşılaştırma) (const void *, const void *));

İşlev, başlık dosyasında tanımlanır.

Bsearch () işlevi, dizi tabanındaki anahtarı arar. Anahtardan küçük tüm elemanlar, dizi tabanında ondan önce görünmelidir. Aynı şekilde, anahtardan büyük tüm elemanlar, tabanda ondan sonra görünmelidir.

Aramayı gerçekleştirmek için, bsearch () işlevi birinci bağımsız değişken olarak anahtar ve ikinci bağımsız değişken olarak diziden bir öğe ile karşılaştırılarak gösterilen işleve bir dizi çağrı yapar.

bsearch () Parametreler

  • anahtar: Aranacak öğenin işaretçisi
  • taban: Dizinin ilk elemanına işaretçi
  • num: Dizideki öğe sayısı
  • size: Dizideki her bir öğenin bayt cinsinden boyutu
  • karşılaştırma: İki öğeyi karşılaştıran bir işleve işaretçi. Döner
    • ilk bağımsız değişken ikinciden küçükse negatif bir tam sayı
    • ilk bağımsız değişken ikinciden büyükse pozitif bir tam sayı
    • her iki bağımsız değişken de eşitse sıfır

anahtar ilk argüman olarak aktarılır ve diziden bir eleman ikinci argüman olarak aktarılır. Karşılaştırma işlevinin prototipi şöyle görünür:

 int karşılaştırma (const void * a, const void * b);

bsearch () Dönüş değeri

Bsearch () işlevi şunu döndürür:

  • Bulunan elemanın işaretçisi. Birden fazla eşleşen öğe bulunursa, sonuç olarak işlevin hangi öğenin adresini döndüreceği belirtilmez.
  • Öğe bulunamazsa boş gösterici.

Örnek 1: bsearch () işlevi nasıl çalışır?

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

Programı çalıştırdığınızda, çıktı:

 2. pozisyonda 10 bulundu 15 bulunamadı

Örnek 2: bsearch () işlevi birden fazla eşleşen öğe için nasıl çalışır?

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

Programı çalıştırdığınızda, olası bir çıktı:

 14, 7. pozisyonda bulundu

Ilginç makaleler...