Aracılığıyla paylaş


bsearch

Sıralanmış bir dizide ikili arama gerçekleştirir. Bu işlevin daha güvenli bir sürümü kullanılabilir; bkz bsearch_s. .

Sözdizimi

void *bsearch(
   const void *key,
   const void *base,
   size_t num,
   size_t width,
   int ( __cdecl *compare ) (const void *key, const void *datum)
);

Parametreler

key
Aranacak anahtarın işaretçisi.

base
Arama verilerinin tabanına işaret eden işaretçi.

number
Öğe sayısı.

width
Öğelerin genişliği.

compare
İki öğeyi karşılaştıran geri çağırma işlevi. Birincisi aramanın anahtarının işaretçisi, ikincisi ise anahtarla karşılaştırılacak dizi öğesinin işaretçisidir.

Dönüş değeri

bsearch tarafından işaret edilen dizideki örneğine key baseyönelik bir işaretçi döndürür. bulunamazsa key işlevi döndürür NULL. Dizi artan sıralama düzeninde değilse veya aynı anahtarlara sahip yinelenen kayıtlar içeriyorsa, sonuç tahmin edilemez.

Açıklamalar

bsearch işlevi, her biri bayt boyutunda sıralanmış bir öğe dizisi number için width ikili arama gerçekleştirir. base Değer, aranacak dizinin tabanına işaret eden bir işaretçidir ve key aranan değerdir. compare parametresi, istenen anahtarı bir dizi öğesiyle karşılaştıran, kullanıcı tarafından sağlanan yordama yönelik bir işaretçidir. İlişkilerini belirten aşağıdaki değerlerden birini döndürür:

Yordam tarafından compare döndürülen değer Açıklama
< 0 Anahtar dizi öğesinden küçük.
0 Anahtar dizi öğesine eşittir.
> 0 Anahtar, dizi öğesinden büyüktür.

Bu işlev parametrelerini doğrular. , compareveya ise veya ise ve number sıfır değilse NULL base ya da sıfırsawidth, işlev Parametre doğrulama bölümünde açıklandığı gibi geçersiz parametre işleyicisini çağırır.NULLnumber key Yürütmenin devam etmesi için izin verilirse, errno olarak ayarlanır EINVAL ve işlevi döndürür NULL.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Gereksinimler

Yordam Gerekli başlık
bsearch <stdlib.h> ve <search.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

Bu program bir dize dizisini qsort ile sıralar ve ardından "cat" sözcüğünü bulmak için bsearch kullanır.

// crt_bsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( char **arg1, char **arg2 )
{
   /* Compare all of both strings: */
   return _strcmpi( *arg1, *arg2 );
}

int main( void )
{
   char *arr[] = {"dog", "pig", "horse", "cat", "human", "rat", "cow", "goat"};
   char **result;
   char *key = "cat";
   int i;

   /* Sort using Quicksort algorithm: */
   qsort( (void *)arr, sizeof(arr)/sizeof(arr[0]), sizeof( char * ), (int (*)(const
   void*, const void*))compare );

   for( i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i )    /* Output sorted list */
      printf( "%s ", arr[i] );

   /* Find the word "cat" using a binary search algorithm: */
   result = (char **)bsearch( (char *) &key, (char *)arr, sizeof(arr)/sizeof(arr[0]),
                              sizeof( char * ), (int (*)(const void*, const void*))compare );
   if( result )
      printf( "\n%s found at %Fp\n", *result, result );
   else
      printf( "\nCat not found!\n" );
}
cat cow dog goat horse human pig rat
cat found at 002F0F04

Ayrıca bkz.

Arama ve sıralama
_lfind
_lsearch
qsort