Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Provede binární vyhledávání seřazeného pole. K dispozici je bezpečnější verze této funkce; viz .bsearch_s
Syntaxe
void *bsearch(
const void *key,
const void *base,
size_t num,
size_t width,
int ( __cdecl *compare ) (const void *key, const void *datum)
);
Parametry
key
Ukazatel na klíč, který chcete vyhledat.
base
Ukazatel na základ vyhledávacích dat.
number
Počet prvků
width
Šířka prvků
compare
Funkce zpětného volání, která porovnává dva prvky. První je ukazatel na klíč pro hledání a druhý je ukazatel na prvek pole, který se má porovnat s klíčem.
Vrácená hodnota
bsearch vrátí ukazatel na výskyt key v matici, na kterou baseodkazuje . Pokud key se nenajde, vrátí NULLfunkce . Pokud pole není ve vzestupném pořadí řazení nebo obsahuje duplicitní záznamy s identickými klíči, je výsledek nepředvídatelný.
Poznámky
Funkce bsearch provádí binární vyhledávání seřazeného pole number prvků, přičemž každý z width bajtů má velikost. Hodnota base je ukazatel na základ pole, který se má prohledávat, a key je to hodnota, kterou hledáte. Parametr compare je ukazatel na rutinu zadanou uživatelem, která porovnává požadovaný klíč s prvkem pole. Vrátí jednu z následujících hodnot, které určují jejich relaci:
Hodnota vrácená rutinou compare |
Popis |
|---|---|
< 0 |
Klíč je menší než prvek pole. |
0 |
Klíč je roven prvku pole. |
> 0 |
Klíč je větší než prvek pole. |
Tato funkce ověří své parametry. Pokud compareje , key nebo number je nebo base NULL je NULLnenulová number nebo pokud width je nula, funkce vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je povoleno pokračovat provádění, errno je nastavena na EINVAL a funkce vrátí NULL.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
| Rutina | Požadovaný hlavičkový soubor |
|---|---|
bsearch |
<stdlib.h> a <search.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
Tento program seřadí pole řetězců pomocí qsortu a pak pomocí funkce bsearch vyhledá slovo "cat".
// 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