Adloun

Écrire le tri à bulles

Exercice supplémentaire · niveau 2 · NSI (première), chapitre 7 — Parcourir, trier, prouver · D'autres tris que les deux du programme

Énoncé

Écrire le tri à bulles : parcourir le tableau en échangeant les voisins mal ordonnés, recommencer. Donner son invariant, et montrer par la mesure ce que lui apporte un drapeau d'arrêt anticipé.

Corrigé


def tri_bulles(t):
    """Trie t en échangeant les voisins mal ordonnés."""
    n = len(t)
    for i in range(n - 1):
        # invariant : t[n-i..n-1] est trié et contient les i plus grands
        for j in range(n - 1 - i):
            if t[j] > t[j + 1]:
                t[j], t[j + 1] = t[j + 1], t[j]

def tri_bulles_drapeau(t):
    """Même chose, mais on s'arrête dès qu'un passage n'échange rien."""
    n = len(t)
    for i in range(n - 1):
        echange = False
        for j in range(n - 1 - i):
            if t[j] > t[j + 1]:
                t[j], t[j + 1] = t[j + 1], t[j]
                echange = True
        if not echange:
            break

Validation : tableaux tirés au hasard, les deux versions d'accord avec sorted.

L'invariant. Après le passage , les plus grands éléments sont à leur place définitive, en queue de tableau. Chaque passage fait « remonter » le plus grand élément restant jusqu'au bout, par échanges de proche en proche — d'où le nom.

La mesure.

sans drapeau, triéavec drapeau, triéà l'envers

Sur un tableau déjà trié, le drapeau fait tomber le coût de à : le premier passage n'échange rien, on sort. Le tri devient linéaire dans son meilleur cas — comme le tri par insertion, et pour la même raison. Sur un tableau à l'envers, en revanche, rien n'est gagné : , avec un rapport de à chaque doublement.

Pourquoi il n'est pas au programme. Il est quadratique comme les deux autres, mais il fait beaucoup plus d'échanges — un par inversion, contre pour la sélection. Il est célèbre surtout pour être le plus mauvais des tris simples ; le programme lui préfère, à juste titre, les deux qui se démontrent le plus clairement.

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.