Adloun

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.