Implémenter et déjouer les pièges

Les pièges classiques

Trois erreurs reviennent sans cesse quand on écrit une recherche dichotomique. Les connaître te permettra de les repérer immédiatement dans ton propre code ou dans celui d'un camarade.

Premier piège : appliquer la dichotomie sur un tableau NON trié. L'algorithme ne vérifie jamais que le tableau est trié, il fait juste confiance à cet ordre pour éliminer une moitié. Sur [8, 2, 19, 4, 11], chercher 4 peut échouer alors que 4 est bien présent, car la comparaison avec le milieu ne reflète pas la vraie position de la cible.

tableau non trie : [8, 2, 19, 4, 11], cible = 4
milieu (indice 2) = 19  ->  19 > 4  -> on elimine la moitie de DROITE (indices 3 et 4)
mais 4 est justement a l'indice 3, dans la partie eliminee !
resultat incorrect : cible non trouvee alors qu'elle existe

Deuxième piège : mal calculer l'indice du milieu, en particulier avec un nombre pair d'éléments. (gauche + droite) // 2 arrondit toujours vers le bas en Python : sur l'intervalle [4, 5], le milieu vaut 4, pas 5. Ce choix doit être cohérent avec la façon dont tu resserres les bornes ensuite, sinon tu risques une boucle infinie où gauche et droite ne bougent plus.

Troisième piège : oublier de gérer le tableau vide ou la cible absente. Si len(a) == 0, alors droite = -1 dès le départ et la boucle while gauche <= droite ne s'exécute jamais : c'est en fait le comportement correct, à condition que la fonction renvoie bien -1 (ou une valeur clairement signalant « non trouvé ») après la boucle, et non une erreur ou un indice au hasard.

tableau vide : a = [], cible = 5
gauche = 0, droite = -1  ->  gauche > droite  ->  boucle non executee  ->  retour -1 (correct)

En résumé : vérifie toujours que ton tableau est trié avant d'utiliser la dichotomie, teste tes bornes sur des cas limites (tableau vide, un seul élément, cible aux extrémités), et garde une condition d'arrêt cohérente entre le calcul du milieu et la mise à jour de gauche/droite.