Numérique et sciences informatiques (spécialité) · Première
Tri d'une table : exercices corrigés de NSI en Première
Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur
L'essentiel
- Trier une table, c'est ranger ses lignes selon la valeur d'un ou plusieurs champs, la clé de tri.
- En Python,
sorted(table, key=...)renvoie une nouvelle liste ;table.sort(key=...)modifie la liste en place. - Les valeurs lues dans un fichier CSV sont des chaînes : convertis-les avec
intoufloatavant de trier. - Le tri de Python est stable : deux lignes à clés égales gardent leur ordre d'origine, ce qui permet de trier en plusieurs passes.
- Tri par sélection et tri par insertion : deux algorithmes à savoir dérouler à la main, avec leur coût en comparaisons ou en décalages.
Comment utiliser ces exercices
Le traitement de données en tables fait partie du programme de NSI en Première 1. Une table est un ensemble de lignes qui ont les mêmes champs. En Python, on la représente le plus souvent par une liste de dictionnaires, un dictionnaire par ligne, ou par une liste de tuples. Les exercices ci-dessous t'entraînent à trier une telle table, d'abord avec les outils de Python, puis en déroulant à la main deux algorithmes de tri classiques. Tu as déjà vu comment lire un fichier CSV et comment rechercher une valeur dans une table : tu t'en serviras ici.
Les exercices
Exercice 1 Classer des notes
Voici une table de résultats, sous forme de liste de dictionnaires :
eleves = [
{"nom": "Léa", "note": 14},
{"nom": "Hugo", "note": 9},
{"nom": "Inès", "note": 17},
{"nom": "Tom", "note": 12},
{"nom": "Zoé", "note": 15},
]
On trie cette table par note décroissante. Quelle est la note de l'élève placé en deuxième position ?
Indice 1
Pense au paramètre reverse=True.
Indice 2
Les positions se comptent à partir de 1 dans l'énoncé, mais les indices Python commencent à 0.
Voir la correction pas à pas
La clé de tri est le champ
"note". On écritsorted(eleves, key=lambda e: e["note"], reverse=True).Les notes présentes sont 14, 9, 17, 12 et 15. Rangées de la plus grande à la plus petite : 17, 15, 14, 12, 9.
L'élève en première position est Inès (17). L'élève en deuxième position est Zoé, avec 15.
La note recherchée est 15 (celle de Zoé). Retiens que le tri porte sur les lignes entières : c'est la clé qui dit quelle valeur on compare, pas ce qu'on affiche ensuite.
Exercice 2 Écrire la ligne de tri
Une table pays est une liste de dictionnaires ayant les champs "nom", "superficie" (un entier) et "capitale".
Écris une instruction qui range la table en place par superficie croissante, puis une expression qui construit sans modifier pays une nouvelle liste rangée par nom alphabétique.
Indice 1
En place : méthode de liste. Sans modifier : fonction qui renvoie une nouvelle liste.
Indice 2
Pour trier par nom, la clé renvoie ligne["nom"].
Voir la correction pas à pas
Pour modifier la liste, on utilise la méthode
sort:pays.sort(key=lambda p: p["superficie"]). L'ordre croissant est celui par défaut.Pour conserver
paysintact, on utilisesorted:par_nom = sorted(pays, key=lambda p: p["nom"]).Les deux appels utilisent une fonction de clé qui extrait un champ d'une ligne ; seule la forme de l'appel change.
sort modifie la liste et renvoie None, sorted renvoie une nouvelle liste. Choisis sorted quand tu as besoin de garder la table d'origine.
Exercice 3 Le piège des chaînes
On lit un fichier CSV : toutes les valeurs de la colonne age arrivent sous forme de chaînes. La liste obtenue est :
ages = ["5", "42", "100", "7", "23"]
On applique sorted(ages) sans convertir. À quel indice (en partant de 0) se trouve alors la chaîne "5" dans la liste triée ? Explique ensuite comment obtenir un tri numérique.
Indice 1
Compare les chaînes caractère par caractère, en commençant par le premier.
Indice 2
Le caractère "1" est plus petit que "2", qui est plus petit que "4", "5", "7".
Voir la correction pas à pas
Les premiers caractères sont :
5,4,1,7,2. Les chaînes commençant par1passent en premier :"100".Viennent ensuite celles qui commencent par
2("23"), puis4("42"), puis5("5"), puis7("7").La liste triée est donc
["100", "23", "42", "5", "7"]. La chaîne"5"est à l'indice 3.Pour un tri numérique, on convertit dans la clé :
sorted(ages, key=int). On obtient["5", "7", "23", "42", "100"], et les éléments restent des chaînes.
L'indice cherché est 3. Un tri sur des chaînes n'est pas un tri sur des nombres : convertis dans la fonction de clé (key=int) ou à la lecture du fichier.
Exercice 4 Trier par une clé calculée
On range la liste de mots suivante par longueur croissante, avec sorted(mots, key=len) :
mots = ["pomme", "kiwi", "fraise", "fig", "orange"]
À quel indice (en partant de 0) se trouve "orange" dans le résultat ? Justifie la place relative de "fraise" et "orange".
Indice 1
Calcule d'abord la longueur de chaque mot.
Indice 2
Deux mots ont la même longueur : que fait un tri stable ?
Voir la correction pas à pas
Longueurs : pomme 5, kiwi 4, fraise 6, fig 3, orange 6.
Ordre croissant des longueurs : fig (3), kiwi (4), pomme (5), puis les deux mots de longueur 6.
"fraise"et"orange"ont la même clé. Le tri de Python étant stable, ils gardent leur ordre d'origine :"fraise"était avant"orange", il le reste.Résultat :
["fig", "kiwi", "pomme", "fraise", "orange"]."orange"est à l'indice 4.
L'indice est 4. La clé n'est pas obligatoirement un champ : toute fonction qui renvoie une valeur comparable convient, ici la longueur du mot.
Exercice 5 Trier selon deux critères
Voici une table de six lignes (nom, classe, note) :
t = [("Ana", "1A", 12), ("Bob", "1B", 15), ("Chloé", "1A", 15),
("Dan", "1B", 12), ("Eva", "1A", 15), ("Fred", "1B", 9)]
On veut ranger les lignes par classe croissante et, dans chaque classe, par note décroissante, les égalités gardant l'ordre d'origine. On procède en deux passes avec des tris stables.
- Dans quel ordre faut-il effectuer les deux tris ?
- Quel est le nom de l'élève en troisième position à la fin ?
Indice 1
Le dernier tri effectué est celui du critère le plus important.
Indice 2
Après le premier tri, écris la liste complète avant de passer au second.
Voir la correction pas à pas
Le critère principal est la classe : c'est lui qui doit être appliqué en dernier. On commence donc par la note décroissante, puis on trie par classe.
Première passe :
t.sort(key=lambda l: l[2], reverse=True). Notes 15 : Bob, Chloé, Eva (dans leur ordre d'origine). Notes 12 : Ana, Dan. Note 9 : Fred. Liste : Bob, Chloé, Eva, Ana, Dan, Fred.Seconde passe :
t.sort(key=lambda l: l[1]). Le tri est stable, donc chaque classe garde l'ordre de la première passe. Classe 1A : Chloé, Eva, Ana. Classe 1B : Bob, Dan, Fred.Liste finale : Chloé, Eva, Ana, Bob, Dan, Fred. Le troisième est Ana.
L'élève en troisième position est Ana. Pour trier sur plusieurs critères en passes successives, on commence par le critère le moins important et on termine par le plus important ; cela ne marche que parce que le tri est stable.
Exercice 6 Compter les comparaisons du tri par sélection
Le tri par sélection parcourt la liste : à l'étape i, il cherche le plus petit élément parmi ceux des positions i à la fin, puis l'échange avec l'élément de la position i.
On l'applique à [5, 2, 9, 1, 6].
- Écris la liste après chaque étape.
- Combien de comparaisons entre deux éléments sont faites au total, sachant que la recherche du minimum sur
kéléments en demandek - 1?
Indice 1
Il y a 5 éléments : combien d'étapes sont nécessaires avant que le dernier soit forcément à sa place ?
Indice 2
Additionne les nombres de comparaisons de chaque étape : 4, 3, ...
Voir la correction pas à pas
Étape 0 : le minimum de
[5, 2, 9, 1, 6]est 1 (position 3). On l'échange avec 5 :[1, 2, 9, 5, 6].Étape 1 : le minimum de
[2, 9, 5, 6]est 2, déjà en place :[1, 2, 9, 5, 6].Étape 2 : le minimum de
[9, 5, 6]est 5. On l'échange avec 9 :[1, 2, 5, 9, 6].Étape 3 : le minimum de
[9, 6]est 6. On l'échange avec 9 :[1, 2, 5, 6, 9]. La liste est triée.Comparaisons : 4 pour l'étape 0 (5 éléments), 3 pour la 1, 2 pour la 2, 1 pour la 3, soit 4 + 3 + 2 + 1 = 10.
Il y a 10 comparaisons. Pour n éléments, on en fait , quelle que soit la disposition initiale : ici . Le nombre de comparaisons croît comme le carré de n.
Exercice 7 Compter les décalages du tri par insertion
Le tri par insertion prend les éléments un par un, de gauche à droite. Chaque nouvel élément est inséré à sa place dans la partie gauche déjà triée : on décale d'une case vers la droite chaque élément de cette partie qui est plus grand que lui.
On l'applique à [7, 3, 5, 1].
- Écris la liste après l'insertion de chaque élément.
- Combien de décalages d'un élément a-t-on faits au total ?
Indice 1
Le premier élément, seul, forme une partie triée.
Indice 2
Un décalage correspond à un élément de la partie triée strictement plus grand que celui qu'on insère.
Voir la correction pas à pas
Départ : la partie triée est
[7].On insère 3 : 7 est plus grand, il se décale (1 décalage). Liste :
[3, 7, 5, 1].On insère 5 : 7 est plus grand, il se décale (1 décalage) ; 3 est plus petit, on s'arrête. Liste :
[3, 5, 7, 1].On insère 1 : 7, 5 et 3 sont plus grands, ils se décalent tous (3 décalages). Liste :
[1, 3, 5, 7].Total : 1 + 1 + 3 = 5 décalages. Ce nombre est celui des couples d'éléments dans le mauvais ordre : (7,3), (7,5), (7,1), (3,1), (5,1).
On fait 5 décalages. Le travail du tri par insertion dépend de l'état de la liste de départ : peu de décalages si elle est presque triée, beaucoup si elle est en ordre inverse.
Les questions qu'on se pose
Faut-il utiliser `sort` ou `sorted` ?
Utilise sorted quand tu veux conserver la table d'origine : elle renvoie une nouvelle liste. Utilise sort quand tu acceptes de modifier la liste : la méthode agit en place et renvoie None. L'erreur classique est d'écrire t = t.sort(...), qui remplace la table par None.
Dois-je savoir écrire les tris à la main ou seulement utiliser `sorted` ?
Les deux. En pratique, on utilise sorted ou sort avec une clé. En revanche, savoir dérouler à la main un tri par sélection ou par insertion, en comptant comparaisons et échanges ou décalages, aide à comprendre ce que fait la machine. Entraîne-toi à écrire l'état de la liste après chaque étape, comme dans les exercices sur la sélection et l'insertion.
Comment trier selon plusieurs colonnes ?
Deux méthodes. Soit tu fais plusieurs tris stables successifs, en terminant par le critère le plus important. Soit tu renvoies un tuple dans la fonction de clé : key=lambda l: (l[1], l[0]) range d'abord selon la colonne 1, puis selon la colonne 0 en cas d'égalité.
Sources
- NSI Première - Traitement de données en tables : opérations (académie Lyon), Académie de Lyon. Consulté le 6 novembre 2026.
- Table de tri, Wikipédia. Consulté le 6 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.