Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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