bsearch
esegue una ricerca binaria di una matrice ordinata.Una versione più sicura di questa funzione è disponibile; vedere 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)
);
Parametri
key
oggetto da cercare.base
Puntatore alla base dei dati trovati.num
Numero di elementi.width
Larghezza degli elementi.compare
funzione di callback che confronta due elementi.Il primo è un puntatore alla chiave per la ricerca e il secondo è un puntatore all'elemento di matrice da confrontare con la chiave.
Valore restituito
bsearch restituisce un puntatore a un'occorrenza key nella matrice indicata da base.se key non viene trovato, la funzione restituisce NULL.Se la matrice non è di dimensioni o non contiene record duplicati con chiavi identiche, il risultato sarà imprevedibile.
Note
bsearch la funzione esegue una ricerca binaria di una matrice ordinata di num elementi, ognuno di width byte nella dimensione.base il valore è un puntatore alla base della matrice da cercare e key è il valore da cercare.compare il parametro è un puntatore a una routine fornita dall'utente che confronta la chiave richiesta a un elemento di matrice e restituisce uno dei seguenti valori che specificano la loro relazione:
Valore restituito da compare routine |
Descrizione |
---|---|
< 0 |
La chiave è minore dell'elemento della matrice. |
0 |
La chiave è uguale all'elemento della matrice. |
> 0 |
La chiave è maggiore dell'elemento della matrice. |
Questa funzione convalida dei parametri.se compare, key o num viene NULL, o se base viene NULL e *num è diverso da zero, o se width è zero, il gestore non valido di parametro viene richiamato, come descritto in Convalida dei parametri.Se l'esecuzione è consentita per continuare, errno è impostato su EINVAL e restituisce un valore di funzione NULL.
Requisiti
routine |
Intestazione di associazione |
---|---|
bsearch |
<definito> e <search.h> |
per informazioni di compatibilità aggiuntive, vedere compatibilità nell'introduzione.
Esempio
Questo programma ordina una matrice di stringhe con qsort e viene utilizzato il bsearch per trovare la parola “gatto„.
// 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" );
}
Equivalente .NET Framework
System:: Raccolte:: Oggetto ArrayList:: BinarySearch