def recherche_dichotomique(liste, valeur):
# La liste doit être triée pour que la recherche dichotomique fonctionne correctement
liste = sorted(liste)
# Initialisation des indices de début et de fin pour la recherche
debut = 0
fin = len(liste) - 1
# Boucle tant que la partie de la liste à examiner n'est pas réduite à zéro
while debut <= fin:
# Calcul de l'indice du milieu pour diviser la liste en deux
milieu = (debut + fin) // 2
# Vérifie si la valeur au milieu est celle que l'on recherche
if liste[milieu] == valeur:
# Si c'est le cas, retourne True car la valeur a été trouvée
return True
# Si la valeur recherchée est plus grande que l'élément au milieu
elif liste[milieu] < valeur:
# Met à jour le début pour ignorer la première moitié de la liste
debut = milieu + 1
# Si la valeur recherchée est plus petite que l'élément au milieu
else:
# Met à jour la fin pour ignorer la seconde moitié de la liste
fin = milieu - 1
# Si la boucle se termine sans trouver la valeur, retourne False
return False
def test_recherche_dichotomique():
# Cas 1 : Liste vide
assert recherche_dichotomique([], 5) == False, "Échec: Liste vide, valeur absente"
# Cas 2 : Liste avec un seul élément, valeur présente
assert recherche_dichotomique([5], 5) == True, "Échec: Liste avec un seul élément, valeur présente"
# Cas 3 : Liste avec un seul élément, valeur absente
assert recherche_dichotomique([3], 5) == False, "Échec: Liste avec un seul élément, valeur absente"
# Cas 4 : Liste triée, valeur présente au début
assert recherche_dichotomique([1, 3, 5, 7, 9], 1) == True, "Échec: Liste triée, valeur présente au début"
# Cas 5 : Liste triée, valeur présente au milieu
assert recherche_dichotomique([1, 3, 5, 7, 9], 5) == True, "Échec: Liste triée, valeur présente au milieu"
# Cas 6 : Liste triée, valeur présente à la fin
assert recherche_dichotomique([1, 3, 5, 7, 9], 9) == True, "Échec: Liste triée, valeur présente à la fin"
# Cas 7 : Liste triée, valeur absente
assert recherche_dichotomique([1, 3, 5, 7, 9], 4) == False, "Échec: Liste triée, valeur absente"
# Cas 8 : Liste non triée, valeur présente (la fonction trie automatiquement)
assert recherche_dichotomique([7, 1, 9, 3, 5], 3) == True, "Échec: Liste non triée, valeur présente"
# Cas 9 : Liste non triée, valeur absente
assert recherche_dichotomique([7, 1, 9, 3, 5], 8) == False, "Échec: Liste non triée, valeur absente"
# Cas 10 : Liste avec des éléments répétitifs, valeur présente
assert recherche_dichotomique([1, 3, 3, 3, 5, 7, 9], 3) == True, "Échec: Liste avec répétitions, valeur présente"
# Cas 11 : Liste avec des éléments répétitifs, valeur absente
assert recherche_dichotomique([1, 3, 3, 3, 5, 7, 9], 4) == False, "Échec: Liste avec répétitions, valeur absente"
print("Tous les tests sont passés avec succès !")
# Exécuter le jeu de tests
test_recherche_dichotomique()