N.B. Niveau : Terminale Générale, enseignement de spécialité NSI (Numérique et Sciences Informatiques)
À savoir
Le tri par insertion est le tri du jeu de cartes : on met les cartes dans l'ordre au fur et à mesure où on les reçoit.
Pour effectuer un tri par insertion, on peut utiliser deux listes :
une liste contenant les éléments à trier,
et une liste qui contiendra les éléments déjà triés.
Cette seconde liste est initialisée à la liste vide.
Puis,
on insère un par un les éléments de la liste à trier (en partant de la fin) à leur place dans la liste d'éléments déjà triés.
Étape | Liste à trier | Élément à insérer | Liste triée après insertion |
---|---|---|---|
Initialisation | [3, 1, 7, 2] | - | [ ] |
1 | |||
2 | |||
3 | |||
4 |
Compléter le tableau ci-dessous avec les différentes étapes du tri par insertion, si la liste à trier est [100, 3, 0, 7, 10] :
Étape | Liste à trier | Élément à insérer | Liste triée après insertion |
---|---|---|---|
Initialisation | [100, 3, 0, 7, 10] | - | [ ] |
1 | |||
2 | |||
3 | |||
4 | |||
5 |
À savoir
Plutôt que de manier deux listes, on peut utiliser un tableau, de taille constante, constitué :
à trier | déjà trié |
Pour réaliser le tri, on ne fait alors qu'échanger la place des éléments dans le tableau. C'est ce que l'on appelle un tri en place.
Trions avec cette méthode le tableau [4, 8, 10, 2, 5].
Étape | Liste à trier | Partie triée | Tableau complet |
---|---|---|---|
Initialisation | [4, 8, 10, 2, 5] | [] | [4, 8, 10, 2, 5] |
1 | |||
2 | |||
3 | |||
4 | |||
5 |
Faire de même que l'exemple ci-dessus, pour le tableau [9, 1, 42, 20, 5]
Étape | Liste à trier | Partie triée | Tableau complet |
---|---|---|---|
Initialisation | |||
1 | |||
2 | |||
3 | |||
4 | |||
5 |
À savoir
Supposons que l'on dispose d'un tableau constitué
Pour réaliser une itération de l'algorithme de tri par insertion, on désire insérer le dernier élément de la partie à trier, c'est-à-dire celui d'indice i, à la bonne place dans la partie triée.
Pour cela :
Le tableau [40, 250, 1, 16, 7, 8, 12, 20, 300] contient une partie non triée de l'indice 0 jusqu'à l'indice i=3, et une partie triée de l'indice 4 jusqu'à la fin du tableau.
Pour réaliser une itération du tri par insertion, il faut insérer l'élément d'indice 3, donc 16, à la bonne place dans la partie trié du tableau ([7, 8, 12, 20, 300]). On procède comme suit :
Étape | j | test : tab[j] > tab[j+1] | résultat du test | tableau après échange |
---|---|---|---|---|
1 | ||||
2 | ||||
3 | ||||
4 |
a) Écrire en Python une fonction insertion qui :
Par exemple insertion(3, [40, 250, 1, 16, 7, 8, 12, 20, 300]) devra retourner : [40, 250, 1, 7, 8, 12, 16, 20, 300] (voir exemple ci-dessus).
Attention, la fonction insertion ne devra pas avoir d'effets de bord.
b) Tester la fonction insertion sur plusieurs exemples.
Penser à tester la fonction insertion dans des cas limites : cas où la partie triée est vide, cas où l'élément est à insérer tout au début de la partie triée, cas où l'élément est à insérer tout à la fin du tableau.
Dans cet exercice, nous allons utiliser la fonction précédente pour concevoir une fonction de tri par insertion.
a) Écrire en Python une fonction tri_insertion qui :
Par exemple tri_insertion([3, 1, 0, 5, 8]) devra retourner [0, 1, 3, 5, 8]
Attention : La fonction tri_insertion devra faire appel à la fonction insertion et ne devra pas avoir d'effets de bord.
b) Tester la fonction tri_insertion, en pensant à réaliser plusieurs tests et à tester les cas limites.
Propriété
Pour tout entier positif n, on a :
Nous allons déterminer la complexité en nombre de comparaisons dans le pire cas de la fonction tri_insertion, en fonction de la longueur n du tableau.
insertion
où la longueur de la partie triée est k.tri_insertion
, la taille de la partie triée au moment
de l'appel à la fonction insertion
est donc k - 1.tri_insertion
est : a) Réécrire une fonction de tri par insertion, similaire à celle de l'exercice 4 mais sans avoir recours à une fonction annexe. Pour cela, on combinera les fonctions insertion et tri_insertion des exercices 3 et 4 en une seule fonction, que l'on nommera tri_insertion2.
b) Écrire une procédure tri_insertion3, similaire à tri_insertion2 mais ne retournant rien et modifiant directement le tableau mis en paramètre via des effets de bord.
b) Modifier la fonction tri_insertion pour qu'elle trie un tableau dans l'ordre décroissant. Vous la nommerez tri_insertion3
Fond : Texte : Tables : Thème Python:
Contenu sous licence CC BY-NC-SA 3.0
Amandine SCHRECK
MAJ : 16/08/2022