Condividi tramite


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 è NULLo 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

Vedi anche

Ricerca e ordinamento
_lfind
_lsearch
qsort