Partager via


bsearch

Effectue une recherche binaire dans un tableau trié. Une version plus sécurisée de cette fonction est disponible ; voir bsearch_s.

Syntaxe

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
Pointeur vers la clé à rechercher.

base
Pointeur vers la base des données de recherche.

number
Nombre d'éléments.

width
Largeur des éléments.

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

Valeur retournée

bsearch retourne un pointeur vers une occurrence de key du tableau pointé par base. Si key elle n’est pas trouvée, la fonction retourne NULL. Si le tableau n’est pas dans l’ordre croissant de tri ou contient des enregistrements en double avec des clés identiques, le résultat est imprévisible.

Notes

La fonction bsearch effectue une recherche binaire dans un tableau trié de number éléments, chacun d’une taille de width octets. La valeur de base est un pointeur vers la base du tableau dans lequel effectuer la recherche, et key est la valeur recherchée. Le compare paramètre est un pointeur vers une routine fournie par l’utilisateur qui compare la clé demandée à un élément de tableau. Elle retourne l’une des valeurs suivantes qui spécifient leur relation :

Valeur retournée par la routine compare Description
< 0 La clé est inférieure à 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 number est NULL, ou s’il base est NULL différent de number zéro, ou s’il width est égal à zéro, la fonction appelle le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à se poursuivre, errno a la valeur EINVAL et la fonction retourne NULL.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Routine En-tête requis
bsearch <stdlib.h> et <search.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

Ce programme trie un tableau de chaînes avec qsort et utilise ensuite bsearch pour rechercher le mot « 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

Voir aussi

Recherche et tri
_lfind
_lsearch
qsort