Aller au contenu

Numérique et sciences informatiques (spécialité) · Première

Tris par insertion et par sélection : exercices de 1re NSI

Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur

L'essentiel

  • Le tri par sélection cherche le minimum de la partie non triée et le place à sa position ; il fait toujours n(n−1)2\frac{n(n-1)}{2} comparaisons 6.
  • Le tri par insertion prend chaque élément à son tour et le glisse à sa place dans la partie gauche déjà triée.
  • Les deux tris sont quadratiques dans le pire cas ; l'insertion peut être plus rapide sur certaines entrées, par exemple une liste presque triée 6.
  • Le tri par sélection fait au plus un nombre linéaire d'échanges 6.
  • Pour prouver qu'un tri est correct, on énonce un invariant de boucle et on le justifie 1.

Comment utiliser ces exercices

Les exercices vont du plus simple au plus difficile. Les premiers te font dérouler les deux algorithmes à la main, sur de petites listes. Les suivants te demandent de compter des opérations, de compléter du code Python, puis de justifier qu'un tri est correct. Prends une feuille, écris l'état de la liste après chaque étape, et ne regarde les indices qu'après avoir cherché quelques minutes.

Les exercices

Exercice 1 Dérouler le tri par sélection

★☆☆Environ 8 min

On trie la liste L = [7, 3, 9, 1, 5] dans l'ordre croissant avec le tri par sélection.

Écris l'état de la liste à la fin de chaque tour de la boucle extérieure, en précisant l'indice du minimum trouvé.

Indice 1

Au premier tour, la partie non triée est la liste entière : cherche son plus petit élément.

Indice 2

Si le minimum est déjà à la bonne place, l'échange ne change rien.

Voir la correction pas à pas
  1. Tour 0 : la partie non triée est [7, 3, 9, 1, 5]. Le minimum est 1, à l'indice 3. On l'échange avec l'élément d'indice 0 : [1, 3, 9, 7, 5].

  2. Tour 1 : la partie non triée commence à l'indice 1 : [3, 9, 7, 5]. Le minimum est 3, déjà à l'indice 1. Rien ne bouge : [1, 3, 9, 7, 5].

  3. Tour 2 : la partie non triée est [9, 7, 5]. Le minimum est 5, à l'indice 4. On l'échange avec l'indice 2 : [1, 3, 5, 7, 9].

  4. Tour 3 : la partie non triée est [7, 9]. Le minimum est 7, déjà à l'indice 3. La liste reste [1, 3, 5, 7, 9].

  5. Il n'y a plus qu'un élément non trié, qui est forcément à sa place : la liste est triée.

Résultat : [1, 3, 5, 7, 9], obtenu avec seulement 2 échanges réels. Le tri par sélection fait peu d'échanges, mais beaucoup de comparaisons 6.

Exercice 2 Dérouler le tri par insertion

★☆☆Environ 8 min

On trie la liste L = [4, 2, 7, 1, 3] dans l'ordre croissant avec le tri par insertion.

Écris la liste après l'insertion de chaque élément, en soulignant mentalement la partie déjà triée à gauche.

Indice 1

Au départ, la partie triée est réduite à [4].

Indice 2

Pour chaque nouvel élément, décale vers la droite tous les éléments de la partie triée qui sont plus grands que lui.

Voir la correction pas à pas
  1. Départ : partie triée [4], reste à insérer 2, 7, 1, 3.

  2. Insertion de 2 : 4 est plus grand, il se décale d'une case. On obtient [2, 4, 7, 1, 3].

  3. Insertion de 7 : 4 n'est pas plus grand que 7, aucun décalage. La liste reste [2, 4, 7, 1, 3].

  4. Insertion de 1 : 7, 4 et 2 sont tous plus grands, ils se décalent. On obtient [1, 2, 4, 7, 3].

  5. Insertion de 3 : 7 et 4 se décalent, 2 est plus petit que 3. On obtient [1, 2, 3, 4, 7].

Résultat : [1, 2, 3, 4, 7]. Remarque qu'à chaque étape, la partie gauche de la liste est triée, même si elle ne contient pas encore tous les éléments.

Exercice 3 Compter les comparaisons du tri par sélection

★☆☆Environ 6 min

Pour une liste de nn éléments, le tri par sélection effectue n(n−1)2\frac{n(n-1)}{2} comparaisons, quel que soit le contenu de la liste 6.

  1. Combien de comparaisons effectue-t-il pour une liste de 1010 éléments ?
  2. Retrouve ce résultat en additionnant les comparaisons de chaque tour : au tour 00, on compare le minimum provisoire aux 99 autres éléments.
Indice 1

Au tour ii, la partie non triée contient n−in-i éléments, donc on fait n−i−1n-i-1 comparaisons.

Indice 2

Additionne 9+8+7+⋯+19+8+7+\dots+1.

Voir la correction pas à pas
  1. Applique la formule avec n=10n=10 : 10×92=45\frac{10\times 9}{2}=45.

  2. Vérifie par la somme des tours : 9+8+7+6+5+4+3+2+19+8+7+6+5+4+3+2+1.

  3. Regroupe les termes par paires : (9+1)+(8+2)+(7+3)+(6+4)+5=4×10+5=45(9+1)+(8+2)+(7+3)+(6+4)+5=4\times 10+5=45.

  4. Les deux méthodes donnent le même nombre.

Le tri par sélection d'une liste de 10 éléments fait 45 comparaisons, même si la liste est déjà triée. C'est ce qui rend ce tri peu intéressant sur des listes presque triées.

Exercice 4 Compléter le tri par sélection en Python

★★☆Environ 12 min

Voici une fonction de tri par sélection dont trois lignes sont à compléter (repérées par ...).

def tri_selection(t):
    n = len(t)
    for i in range(n - 1):
        m = i                      # indice du minimum provisoire
        for j in range(..., n):    # (a)
            if t[j] < t[m]:
                ...                # (b)
        t[i], t[m] = ..., ...      # (c)
  1. Complète les lignes (a), (b) et (c).
  2. Pourquoi la boucle extérieure s'arrête-t-elle à n - 2 et non à n - 1 ?
  3. Que renvoie la fonction, et que devient la liste passée en paramètre ?
Indice 1

La boucle intérieure ne regarde que la partie non triée, qui commence juste après l'indice i.

Indice 2

L'échange en Python s'écrit a, b = b, a.

Voir la correction pas à pas
  1. (a) : la partie non triée commence à i, et t[i] sert déjà de minimum provisoire. On parcourt donc les indices suivants : range(i + 1, n).

  2. (b) : quand on trouve une valeur plus petite que le minimum provisoire, on retient son indice : m = j.

  3. (c) : on place le minimum à la position i par un échange : t[i], t[m] = t[m], t[i].

  4. Quand i vaut n - 1, la partie non triée ne contient qu'un seul élément, qui est forcément le plus grand et déjà à sa place. Inutile de faire un tour de plus.

  5. La fonction ne contient pas de return : elle renvoie None. La liste est modifiée directement, car le tri se fait sur place 6.

Le code complet utilise range(i + 1, n), m = j et t[i], t[m] = t[m], t[i]. Après l'appel tri_selection(L), c'est L elle-même qui est triée.

Exercice 5 Compter les échanges sur une liste inversée

★★☆Environ 10 min

On applique le tri par sélection de l'exercice précédent à la liste [5, 4, 3, 2, 1], qui est triée en ordre décroissant.

On compte un échange seulement quand le minimum trouvé n'est pas déjà à la position i (si m == i, on ne fait rien). Combien d'échanges sont réalisés ?

Indice 1

Déroule les tours un par un, comme dans l'exercice 1.

Indice 2

Remarque qu'après deux échanges bien choisis, la liste est déjà triée.

Voir la correction pas à pas
  1. Tour 0 : le minimum est 1, à l'indice 4. Échange avec l'indice 0 : [1, 4, 3, 2, 5]. Premier échange.

  2. Tour 1 : la partie non triée est [4, 3, 2, 5]. Le minimum est 2, à l'indice 3. Échange avec l'indice 1 : [1, 2, 3, 4, 5]. Deuxième échange.

  3. Tour 2 : le minimum de [3, 4, 5] est 3, déjà à l'indice 2. Pas d'échange.

  4. Tour 3 : le minimum de [4, 5] est 4, déjà à l'indice 3. Pas d'échange.

  5. On compte 2 échanges. Pour une liste inversée de nn éléments, on échange les éléments par paires symétriques, ce qui donne ⌊n/2⌋\lfloor n/2\rfloor échanges : ici ⌊5/2⌋=2\lfloor 5/2\rfloor=2.

Il y a 2 échanges pour 5 éléments, alors que le nombre de comparaisons vaut 10. Dans tous les cas, le nombre d'échanges du tri par sélection reste au plus linéaire en nn 6.

Exercice 6 Compter les décalages du tri par insertion

★★☆Environ 12 min

Reprends la liste [4, 2, 7, 1, 3] de l'exercice 2. Dans le tri par insertion, un décalage est le déplacement d'un élément de la partie triée d'une case vers la droite.

  1. Combien de décalages sont effectués à chaque insertion ?
  2. Quel est le total pour cette liste ?
Indice 1

Reprends la trace de l'exercice 2 : le nombre de décalages est le nombre d'éléments plus grands que l'élément inséré dans la partie triée.

Indice 2

Additionne les quatre insertions (2, 7, 1, 3).

Voir la correction pas à pas
  1. Insertion de 2 dans [4] : 4 est plus grand, donc 1 décalage.

  2. Insertion de 7 dans [2, 4] : aucun élément plus grand, donc 0 décalage.

  3. Insertion de 1 dans [2, 4, 7] : les trois éléments sont plus grands, donc 3 décalages.

  4. Insertion de 3 dans [1, 2, 4, 7] : 4 et 7 sont plus grands, donc 2 décalages.

  5. Total : 1+0+3+2=61+0+3+2=6 décalages.

Le total est de 6 décalages. Ce nombre mesure à quel point la liste est désordonnée : une liste déjà triée n'en demande aucun, une liste inversée en demande le maximum.

Exercice 7 Liste déjà triée : insertion contre sélection

★★☆Environ 12 min

On trie une liste de 100100 éléments déjà triée dans l'ordre croissant.

Dans le tri par insertion, chaque élément à insérer est comparé à son voisin de gauche ; si celui-ci n'est pas plus grand, l'insertion s'arrête aussitôt.

  1. Combien de comparaisons le tri par insertion effectue-t-il ?
  2. Combien le tri par sélection en effectue-t-il ?
  3. Quelle différence obtient-on, et que peut-on en conclure ?
Indice 1

Le premier élément n'a besoin d'aucune comparaison : il reste seul.

Indice 2

Pour la sélection, applique directement la formule du nombre de comparaisons 6.

Voir la correction pas à pas
  1. Insertion : les 9999 éléments suivants le premier sont chacun comparés une seule fois à leur voisin de gauche, puis laissés en place. Cela fait 100−1=99100-1=99 comparaisons.

  2. Sélection : le nombre de comparaisons ne dépend pas de l'ordre initial, il vaut 100×992=4950\frac{100\times 99}{2}=4950 6.

  3. Différence : 4950−99=48514950-99=4851 comparaisons de plus pour la sélection.

  4. Les deux tris sont quadratiques dans le pire cas, mais l'insertion peut être plus rapide sur certaines entrées particulières 6. Une liste déjà triée en est l'exemple le plus net.

Sur une liste triée de 100 éléments, l'insertion fait 99 comparaisons et la sélection 4950, soit 4851 de plus. Le choix d'un tri dépend donc aussi de l'état dans lequel les données arrivent.

Exercice 8 Prévoir une durée avec un coût quadratique

★★★Environ 10 min

Le coût du tri par sélection est quadratique : il croît comme le carré du nombre nn d'éléments 6. On suppose que la durée d'exécution est proportionnelle au nombre de comparaisons, avec nn assez grand pour négliger le terme en nn.

Un programme trie 20002000 éléments en 44 secondes. Combien de temps faudra-t-il environ pour trier 40004000 éléments ?

Indice 1

Si nn est multiplié par kk, le nombre de comparaisons est environ multiplié par k2k^2.

Indice 2

Ici, kk vaut 22.

Voir la correction pas à pas
  1. Le rapport des tailles est k=40002000=2k=\frac{4000}{2000}=2.

  2. Le coût quadratique est multiplié par k2=4k^2=4.

  3. La durée estimée est donc 4×4=164\times 4=16 secondes.

  4. Ce n'est qu'une estimation : le temps réel dépend aussi de la machine et du reste du programme. Elle montre surtout qu'on ne peut pas se contenter de doubler le temps quand on double la taille.

Doubler la taille de la liste multiplie par quatre la durée : on attend environ 16 secondes. C'est la raison pour laquelle les tris quadratiques sont jugés inefficaces sur de grandes listes, face aux meilleurs algorithmes en O(nlog⁡n)O(n\log n) 6.

Exercice 9 Invariant de boucle du tri par sélection

★★★Environ 20 min

Le programme de Première demande de savoir décrire un invariant de boucle pour justifier qu'un tri est correct 1. On reprend tri_selection de l'exercice 4, et on note t0t_0 la liste au départ de la fonction.

  1. Propose un invariant pour la boucle extérieure, à vérifier au début de chaque tour ii.
  2. Montre qu'il est vrai avant le premier tour.
  3. Montre qu'un tour le conserve.
  4. Conclus sur l'état de la liste en fin de fonction.
Indice 1

Pense à ce que contient la partie gauche de la liste, de l'indice 00 à i−1i-1.

Indice 2

Pour la conservation, utilise le fait que le minimum de la partie non triée est au moins aussi grand que tout ce qui est déjà placé à gauche.

Voir la correction pas à pas
  1. Invariant. Au début du tour ii, les cases d'indices 00 à i−1i-1 contiennent, rangés dans l'ordre croissant, les ii plus petits éléments de t0t_0.

  2. Initialisation. Avant le tour 00, la partie 00 à −1-1 est vide : l'énoncé est vrai sans rien vérifier.

  3. Conservation. Au tour ii, la boucle intérieure trouve le minimum de la partie d'indices ii à n−1n-1. Par l'invariant, tous les éléments de cette partie sont plus grands ou égaux à ceux déjà placés à gauche. Après l'échange, le minimum est à l'indice ii, à droite des éléments déjà triés et supérieur ou égal à chacun d'eux : les i+1i+1 premières cases contiennent donc les i+1i+1 plus petits éléments, dans l'ordre. L'invariant est vrai au début du tour i+1i+1.

  4. Terminaison. La boucle s'arrête quand ii atteint n−1n-1. L'invariant donne alors les n−1n-1 plus petits éléments triés dans les cases 00 à n−2n-2.

  5. Conclusion. La dernière case contient le seul élément restant, qui est le plus grand : la liste entière est triée, et elle contient les mêmes éléments que t0t_0 puisqu'on n'a fait que des échanges.

L'invariant, vrai au départ et conservé à chaque tour, prouve que tri_selection produit bien une liste triée. Pour le tri par insertion, le raisonnement est analogue avec l'invariant « les cases 00 à i−1i-1 contiennent les éléments de départ de ces cases, dans l'ordre croissant ».

Les questions qu'on se pose

Quel tri choisir entre insertion et sélection ?

Les deux sont quadratiques dans le pire cas 6. Le tri par insertion est souvent plus rapide quand la liste est déjà presque triée, car il fait peu de décalages. Le tri par sélection a un avantage précis : il réalise au plus un nombre linéaire d'échanges 6, ce qui compte si déplacer un élément coûte cher. Pour des listes très grandes, aucun des deux n'est adapté : les meilleurs algorithmes s'exécutent en O(nlog⁡n)O(n\log n) 6.

Que faut-il savoir faire à l'examen sur ces deux tris ?

Il faut connaître les deux algorithmes, les dérouler à la main sur un exemple donné et les écrire en Python 5. Le programme demande aussi de pouvoir justifier la correction d'un tri par un invariant de boucle, et de savoir que le coût de ces tris est quadratique dans le pire cas 1. Entraîne-toi donc à tracer, à compter des opérations et à énoncer un invariant.

Sources

Programme visé : Programme de numérique et sciences informatiques de première générale · Ministère de l'Éducation nationale

  1. Programme de numérique et sciences informatiques de première générale, Ministère de l'Éducation nationale. Consulté le 7 novembre 2026.
  2. Les tris - Ressource Lumni/Éduscol (notion de tri, exercices), Éduscol / Lumni. Consulté le 7 novembre 2026.
  3. Algorithmique - Ressource Éduscol, Éduscol. Consulté le 7 novembre 2026.
  4. Ressources algorithmique - Document de référence Éduscol, Ministère de l'Éducation nationale - Éduscol. Consulté le 7 novembre 2026.
  5. Fiche pratique - Tri par insertion et tri par sélection, Pixees (ressources NSI). Consulté le 7 novembre 2026.
  6. Tri par sélection, Wikipédia. Consulté le 7 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.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page