Section courante

A propos

Section administrative du site

BSEARCH

Recherche binaire
Langage C stdlib.h

Syntaxe

void *bsearch(const void *key,const void *base, size_t num, size_t width, int(*compare)(const void *elem1,const void *elem2))

Paramètres

Nom Description
key Ce paramètre permet d'indiquer l'adresse de la valeur à rechercher
base Ce paramètre permet d'indiquer l'adresse du tableau
num Ce paramètre permet d'indiquer le nombre d'item que contient le tableau
width Ce paramètre permet d'indiquer la taille d'un item du tableau
compare Ce paramètre permet d'indiquer la fonction a utiliser pour la comparaison et doit retourner une valeur pour indiquer si les items sont inférieur, égale ou supérieur
elem1 Ce paramètre permet d'indiquer le premier item fonction a utiliser pour la comparaison
elem2 Ce paramètre permet d'indiquer le deuxième item fonction a utiliser pour la comparaison

Retour

Valeur Description
NULL Cette valeur permet d'indiquer la clef spécifié par le paramètre key n'a pas été trouvé.
pointeur Ces valeurs permettent d'indiquer un pointeur sur une entrée du tableau correspondant à la clef de recherche spécifié par le paramètre key.

Description

Cette fonction permet d'effectuer une recherche binaire (dichotomique) dans un tableau. Par conséquent, la fonction «void *bsearch(const void *key,const void *base, size_t num, size_t width, int(*compare)(const void *elem1,const void *elem2))» de la bibliothèque standard du langage de programmation C recherche dans un tableau d'éléments (un membre initialement pointé par le paramètre base), pour un membre correspondant à l'objet pointé par le paramètre key et la taille de chaque membre du tableau est spécifiée par le paramètre width.

Algorithme

MODULE BSEARCH(array, key, size, compare_function)
   low ← 0
   high ← size - 1
   
   BOUCLE TANT QUE low ≤ high FAIRE
      * Calcul de l'index du milieu
      mid ← low + (high - low) / 2

      * Comparer l'élément clef avec l'élément au milieu
      result ← compare_function(key, array[mid])

      SI result = 0 ALORS
         * Si les éléments sont égaux, retourner l'élément trouvé
         RETOURNE adresse de array[mid] * Retourner l'adresse de l'élément trouvé
      SINON SI result < 0 ALORS
         * Si la clef est inférieure, chercher dans la partie gauche
         high ← mid - 1
      SINON
         * Si la clef est supérieure, chercher dans la partie droite
         low ← mid + 1
      FIN SI
   FIN BOUCLE TANT QUE
   RETOURNE NULL * Si l'élément n'est pas trouvé, retourner NULL

Remarques

Exemple

Voici quelques exemples typiques de l'utilisation de cette fonction :

Essayer maintenant !
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define NUM_ELEMENT_ARRAY 7
  6. #define STR_LENGTH 5
  7.  
  8. char strvalues[][STR_LENGTH] = {"ABC","DEF","GHI","JKL","MNO","PQR","STU"};
  9.  
  10. int main ()
  11. {
  12.   if(NULL != (char*)bsearch("DEF", strvalues, NUM_ELEMENT_ARRAY, STR_LENGTH, (int(*)(const void*,const void*)) strcmp)) {
  13.     printf("DEF est dans le tableau.\n");
  14.   } else {
  15.     printf("DEF n'est pas trouvé dans le tableau.\n");
  16.   }
  17.   return 0;
  18. }

on obtiendra le résultat suivant :

DEF est dans le tableau.

Voir également

Langage de programmation - C - Référence de procédures et fonctions - qsort
Langage de programmation - C++ - Référence de procédures et fonctions - bsearch

Références

Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 730.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 44.

Dernière mise à jour : Mardi, le 28 juillet 2015