bsearch
Wykonuje wyszukiwanie binarne posortowanej tablicy. Dostępna jest bezpieczniejsza wersja tej funkcji; zobacz bsearch_s
.
Składnia
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
Wskaźnik do klucza do wyszukania.
base
Wskaźnik do podstawy danych wyszukiwania.
number
Liczba elementów.
width
Szerokość elementów.
compare
Funkcja wywołania zwrotnego, która porównuje dwa elementy. Pierwszy to wskaźnik do klucza wyszukiwania, a drugi jest wskaźnikiem do elementu tablicy, który ma zostać porównany z kluczem.
Wartość zwracana
bsearch
Zwraca wskaźnik do wystąpienia key
w tablicy wskazywanej przez base
. Jeśli key
nie zostanie znaleziona, funkcja zwraca wartość NULL
. Jeśli tablica nie znajduje się w kolejności sortowania rosnącego lub zawiera zduplikowane rekordy z identycznymi kluczami, wynik jest nieprzewidywalny.
Uwagi
Funkcja bsearch
wykonuje binarne wyszukiwanie posortowanej tablicy number
elementów o rozmiarze każdy z bajtów width
. Wartość base
jest wskaźnikiem do podstawy tablicy do przeszukania i key
jest poszukiwaną wartością. Parametr compare
jest wskaźnikiem do procedury dostarczonej przez użytkownika, która porównuje żądany klucz z elementem tablicy. Zwraca jedną z następujących wartości, które określają ich relację:
Wartość zwracana przez compare procedurę |
opis |
---|---|
< 0 |
Klucz jest mniejszy niż element tablicy. |
0 |
Klucz jest równy elementowi tablicy. |
> 0 |
Klucz jest większy niż element tablicy. |
Ta funkcja weryfikuje jego parametry. Jeśli compare
parametr , key
lub NULL
number
ma NULL
number
wartość , lub base
jest niezerowy lub jeśli width
ma wartość zero, funkcja wywołuje nieprawidłową procedurę obsługi parametrów, zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonywanie jest dozwolone do kontynuowania, jest ustawione na EINVAL
, errno
a funkcja zwraca wartość NULL
.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
bsearch |
<stdlib.h> i <search.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
Ten program sortuje tablicę ciągów z qsort, a następnie używa bsearch do znalezienia słowa "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