bsearch
Provádí binární hledání seřazené pole.Bezpečnější verze této funkce je k dispozici. see bsearch_s.
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
Objekt, který chcete vyhledat.base
Ukazatel na základní vyhledávání údajů.num
Počet prvků.width
Šířka prvky.compare
Funkce zpětného volání, který porovnává dva prvky.První je ukazatel na klíč pro vyhledávání a druhý je ukazatel na prvek pole porovnat s klíči.
Vrácená hodnota
bsearchvrací ukazatel na výskyt key v poli, na kterou odkazuje base.Pokud key nebyl nalezen, vrátí funkce NULL.Pokud pole není ve vzestupném pořadí řazení nebo stejné klíče obsahuje duplicitní záznamy, výsledkem nepředvídatelné.
Poznámky
bsearch Funkce provádí binární hledání seřazené pole z num prvky, každý z width bajty.base Hodnota je ukazatel na základ pole, které mají být prohledány a key je předložena žádost o hodnotu.compare Je parametr ukazatel na uživatelem zadaný rutina, která porovná klíč požadovaného prvku pole a vrátí jednu z následujících hodnot určujících jejich vztah:
Hodnotu vrácenou compare rutina |
Description |
---|---|
< 0 |
Klíč je menší než prvek pole. |
0 |
Klíč je prvek pole. |
> 0 |
Klíč je větší než prvek pole. |
Tato funkce ověřuje své parametry.Pokud compare, key nebo num je NULL, nebo -li base je NULL a *num je nenulová, nebo pokud width je nula, vyvolán neplatný parametr obslužné rutiny, jak je popsáno v Ověření parametru.Pokud smí provádění pokračovat, errno se nastaví na EINVAL a funkce vrátí NULL.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
bsearch |
<stdlib.h> a <search.h> |
Další informace o kompatibilitě naleznete v úvodu tématu Kompatibilita.
Příklad
Tento program řazení qsort pole řetězců a potom použije bsearch vyhledejte slovo "kočka".
// 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" );
}
Ekvivalent v rozhraní .NET Framework
System::Collections::ArrayList::BinarySearch