Udostępnij przez


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 compareparametr , key lub NULLnumber ma NULLnumber 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

Zobacz też

Wyszukiwanie i sortowanie
_lfind
_lsearch
qsort