Adapter tri insertion pour trier une table (chapitre 6) suivant une…
Exercice d'entraînement · niveau 1 (application) · NSI (première), chapitre 7 — Parcourir, trier, prouver · Variantes des deux tris
Énoncé
Adapter tri_insertion pour trier une table (chapitre 6) suivant une colonne. Que faut-il changer, et que gagne-t-on à écrire soi-même ce tri ?
Corrigé
def tri_insertion_table(table, colonne):
"""Trie une table sur place, par ordre croissant d'une colonne.
Précondition : la colonne existe dans chaque ligne et ses valeurs
sont comparables entre elles.
"""
for i in range(1, len(table)):
x = table[i]
j = i
while j > 0 and table[j - 1][colonne] > x[colonne]:
table[j] = table[j - 1]
j = j - 1
table[j] = x
Une seule chose change : la comparaison. t[j - 1] > x devient table[j-1][colonne] > x[colonne] — on compare les clés, on déplace les lignes. C'est exactement ce que dit la figure du chapitre 6 : trier une table réordonne des lignes entières, un enregistrement ne se disloque jamais.
Contrôle. Sur les cinq élèves triés par moyenne : Yanis, Camille, Adam, Nour, Sofia — identique à sorted(eleves, key=lambda l: l["moyenne"]).
Ce qu'on gagne à l'écrire. Rien, en pratique : le chapitre 6 autorise explicitement sorted, qui est plus rapide et déjà correct. Le gain est de compréhension — et il est double. On voit que le key de sorted n'est qu'une façon de dire « compare ceci plutôt que cela ». Et l'on voit que la stabilité promise par le chapitre 6 n'est pas magique : elle vient du > de la ligne while, comme on l'a démontré à l'exercice précédent.
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.