bsearch

Effectue une recherche binaire d'un tableau trié.un plus version sécurisée de cette fonction est disponible ; consultez 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) 
);

Paramètres

  • key
    Objet à rechercher.

  • base
    Pointeur vers la base de données de correspondance.

  • num
    Nombre d'éléments.

  • width
    largeur des éléments.

  • compare
    fonction de rappel qui compare deux éléments.Le premier est un pointeur à la clé de la recherche et le second est un pointeur vers l'élément de tableau à comparer à la clé.

Valeur de retour

bsearch retourne un pointeur vers une occurrence d' key du tableau désignée par base.Si key est introuvable, la fonction retourne NULL.Si le tableau n'est pas dans l'ordre de tri croissant ou ne contient pas les enregistrements en double avec les clés identiques, le résultat est imprévisible.

Notes

La fonction d' bsearch effectue une recherche binaire d'un tableau trié d'éléments d' num , chacun d'octets d' width en taille.La valeur d' base est un pointeur vers la base du tableau à rechercher, et key est la valeur recherchée.Le paramètre d' compare est un pointeur vers une routine fournie par l'utilisateur qui compare la clé demandée à un élément de tableau et retourne une des valeurs suivantes spécifiant les relations :

valeur retournée par routine d' compare

Description

< 0

la clé est moins que l'élément de tableau.

0

la clé est égale à l'élément de tableau.

> 0

La clé est supérieure à l'élément de tableau.

cette fonction valide ses paramètres.si compare, key ou num est NULL, ou si base est NULL et *num est différent de zéro, ou si width est zéro, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, errno est défini à EINVAL et la fonction retourne NULL.

Configuration requise

routine

en-tête requis

bsearch

<stdlib.h> et <search.h>

Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.

Exemple

Ce programme trie une table de chaînes avec le qsort, puis utilise le bsearch pour rechercher le mot « chat ».

// 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" );
}
  

Équivalent .NET Framework

System : : collections : : ArrayList : : BinarySearch

Voir aussi

Référence

Rechercher et trier

_lfind

_lsearch

qsort