Condividi tramite


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

Vedere anche

Riferimenti

Ricerca e ordinamento

_lfind

_lsearch

qsort