Adloun

NSI (première) · Chapitre 7 · Exercice de TD

Modifier tri insertion pour trier par ordre décroissant

Parcourir, trier, prouver · Les deux tris, leurs invariants, leur coût · niveau 2

Énoncé

Modifier tri_insertion pour trier par ordre décroissant. Une seule modification suffit : laquelle ? L'invariant change-t-il ?

Corrigé

Un seul caractère. Le > de la condition devient < :


def tri_insertion_decroissant(t):
    """Trie t par ordre DÉCROISSANT, sur place."""
    for i in range(1, len(t)):
        x = t[i]
        j = i
        while j > 0 and t[j - 1] < x:      # SEULE modification : > devient <
            t[j] = t[j - 1]
            j = j - 1
        t[j] = x

tri_insertion_decroissant([5, 2, 8, 1]) rend [8, 5, 2, 1]. Validation : comparée à sorted(t, reverse=True) sur tableaux tirés au hasard, doublons compris — cas passent.

L'invariant change, mais d'un mot. Il devient : avant le tour , t[0..i-1] est trié par ordre décroissant et contient les mêmes éléments que les premiers du tableau initial. La structure de la démonstration — initialisation, conservation, terminaison — ne bouge pas d'une ligne ; seul le sens de la relation d'ordre est renversé.

Le variant, lui, ne change pas du tout. C'est toujours j, entier, positif, strictement décroissant. La terminaison ne dépend pas du sens du tri : elle ne dépend que de la façon dont j évolue.

Ce que cet exercice enseigne. Un invariant bien écrit se transporte. Il est paramétré par la relation d'ordre, et changer la relation ne demande pas de tout redémontrer. C'est un critère de qualité : un invariant qu'il faudrait réécrire entièrement pour une variante aussi mince était sans doute trop lié au code et pas assez à l'idée.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →