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
base
yö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. , compare
veya 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.NULL
number
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