bsearch
Esegue una ricerca binaria di una matrice ordinata. È disponibile una versione più sicura di questa funzione; vedere bsearch_s
.
Sintassi
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
Puntatore alla chiave da cercare.
base
Puntatore alla base dei dati di ricerca.
number
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 della matrice da confrontare con la chiave.
Valore restituito
bsearch
restituisce un puntatore a un'occorrenza di key
nella matrice a cui punta base
. Se key
non viene trovato, la funzione restituisce NULL
. Se la matrice non è in ordine crescente o contiene record duplicati con chiavi identiche, il risultato è imprevedibile.
Osservazioni:
La funzione bsearch
esegue una ricerca binaria di una matrice di elementi number
ordinata, ognuno di width
byte. Il valore base
è un puntatore a base della matrice in cui eseguire la ricerca e key
è il valore cercato. Il compare
parametro è un puntatore a una routine fornita dall'utente che confronta la chiave richiesta con un elemento di matrice. Restituisce uno dei valori seguenti che specificano la relazione:
Valore restituito dalla routine compare |
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 i relativi parametri. key
Se compare
, o number
è NULL
o se base
è NULL
e number
è diverso da zero o se width
è zero, la funzione richiama il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, errno
viene impostato su EINVAL
e la funzione restituisce NULL
.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
bsearch |
<stdlib.h> e <search.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
Questo programma consente di ordinare una matrice di stringhe con qsort e quindi usa bsearch per trovare la parola "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