Recherche binaire
La recherche binaire (ou binaire) est un algorithme de recherche efficace et plus rapide que la recherche linéaire. Par exemple, pour un tableau de 1024 éléments, une recherche linéaire dans le pire des cas (lorsque l'élément recherché n'est pas dans le tableau) traitera les 1024 éléments, mais il suffit de traiter 10 éléments avec une recherche binaire. Ce résultat est obtenu grâce au fait qu'après la première étape de la boucle, la zone de recherche se réduit à 512 éléments, après la seconde – jusqu'à 256 etc.
Les inconvénients de cet algorithme sont la nécessité d'ordonner les données, ainsi que la possibilité d'accéder à n'importe quel élément de données dans un temps constant (indépendant de la quantité de données). Par conséquent, l'algorithme ne peut pas fonctionner sur des tableaux non ordonnés.
Algorithme
- Sélectionnez l'élément intermédiaire
A[c]
et comparez avec X
.
- Si
X = A[c]
alors trouvé (stop).
- Si
X < A[c]
, chercher plus loin dans la première moitié.
- Si
X > A[c]
, regardez plus loin dans la seconde moitié.
Mise en œuvre
L = 0 ; R=N; // segment initial
tandis que ( L < R - 1)
{
c = (L + R) / 2 ; // a trouvé le milieu
if ( X < A[c] ) // compression de segment
R=c;
autre
L = c ;
}
si ( A[L] == X)
cout << "A" << L<< "]=" << X;
autre
cout << "Introuvable";
où :
A
- tableau source,
N
- taille du tableau,
X
- numéro recherché,
D'autres implémentations sont possibles.
Par exemple, en utilisant une sortie anticipée de la boucle
L = 0 ; R = N-1 ;
tandis que (R >= L)
{
c = (L + R) / 2 ;
si ( X == A[c] )
{
nX = c ;
casser;
}
si (X < ; A[c]) R = milieu - 1 ;
si (X > A[c]) L = milieu + 1 ;
}
si ( nX < 0)
cout << "Non trouvé";
autre
cout << "A" << nX<< "]=" << X ;