NSI (première) · Chapitre 7 · Application directe du cours
Pourquoi la boucle externe de tri selection s'arrête-t-elle à n - 1 et…
Parcourir, trier, prouver · Dérouler, compter, vérifier · niveau 2
Énoncé
Pourquoi la boucle externe de tri_selection s'arrête-t-elle à n - 1 et non à n ? Que se passerait-il avec n — erreur, ou simple travail inutile ?
Corrigé
Pourquoi suffit. C'est la troisième étape de la démonstration du cours. À la sortie, t[0..n-2] est trié et contient les plus petits éléments ; le seul élément restant est donc le plus grand, et la seule case restante est la dernière. Il y est déjà. Il n'y a rien à faire.
Avec n : du travail inutile, et rien d'autre. Au tour , la boucle interne est range(n, n) — vide. Aucune comparaison n'est faite, m reste égal à , et l'échange t[n-1], t[n-1] = t[n-1], t[n-1] ne change rien.
| comparaisons, boucle à | boucle à | |
|---|---|---|
Exactement le même nombre de comparaisons — et les deux versions rendent le même tableau, vérifié sur tirages. Le coût supplémentaire est d'un tour de boucle et d'un échange nul : invisible.
Ce qui serait, en revanche, une vraie erreur. Écrire range(n + 1) : au tour , l'accès t[n] lèverait une IndexError. Et le cas mérite un regard : range(-1) est vide, donc le tri d'un tableau vide ne fait rien — ce qui est juste.
La conclusion à retenir. Écrire n'est pas une optimisation : c'est ce que la démonstration dit. Une borne de boucle qu'on ne sait pas justifier est une borne qu'on a devinée — et un jour on devinera mal.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
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.