Le tri à bulles trie-t-il vraiment ? Le test de propriété
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 3 — Boucles imbriquées et complexité quadratique
Énoncé
Écrire un test de propriété sur 1000 listes aléatoires validant le tri à bulles. Pourquoi est-il fondamental de tester à la fois que la liste finale est triée et qu'elle conserve les mêmes éléments ?
Corrigé
import random
for essai in range(1000):
taille = random.randint(0, 15)
t = [random.randint(-20, 20) for _ in range(taille)]
copie = list(t) # On sauvegarde l'original pour la comparaison
tri_bulles(t)
# 1. Vérification de la croissance
assert all(t[i] <= t[i+1] for i in range(len(t) - 1)), f"Échec de tri : {t}"
# 2. Vérification de la conservation des éléments
assert sorted(copie) == t, f"Perte de données : {copie} -> {t}"
Une erreur classique d'affectation d'échange (comme écrire t[i] = t[i+1] sans sauvegarder t[i]) peut écraser des données. La liste résultante peut être parfaitement croissante (ex. pour une entrée ), mais elle ne contient plus les mêmes éléments. La seconde clause d'assertion est indispensable.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.