Tri par insertion
Le tri par insertion, comme le tri par sélection, consiste à découper la liste en deux parties :
- Une partie triée située en début de liste (en noir sur le schéma ci-dessous)
- Une partie non triée située en fin de liste (en blanc sur le schéma ci-dessous)
Le changement majeur est qu'au lieu de chercher la valeur minimale dans la partie non triée, on va récupérer la première valeur qu'on va insérer dans la première partie (en respectant l'ordre du tri).
Une animation en ligne permet également de visualiser l'algorithme. Bien sélectionner INS en haut.
Programmation en Python
Pour réaliser le tri par sélection en Python, il est plus pratique de séparer les étapes en fonctions pour simplifier le programme final :
- Une première fonction
deplacer(l, dest, source)permet d'insérer dans la listelà la positiondestla valeur d'indicesourcetout en supprimant l'ancienne valeur.- Exemple : Si
l = [1, 1, 4, 5, 3, 2, 8], alorsdeplacer(l, 2, 4)modifiel, et si onprint(l)on a comme affichage[1, 1, 3, 4, 5, 2, 8]. En effet, la valeur d'indice4(dont la valeur est 3) a été déplacé à la position2. Les valeurs sur la droite ont été décalées.
- Exemple : Si
- Une deuxième fonction
position_tri(l, fin, valeur)renvoie l'indice où la valeurvaleurdoit être insérée dans la listelde telle sorte que la sous-liste de l'indice 0 à l'indicefinexclu soit toujours* triée après insertion de la valeur.- Exemple : Si
l = [1, 5, 6, 8, 3, 2], alorsposition_tri(l, 4, 3)regarde où placer la valeur 3 dans la sous-liste[1, 5, 6, 8]. On peut insérer 3 à l'indice 1 ce qui donnerait[1, 3, 5, 6, 8]qui est toujours triée. La fonction renvoie donc 1 sans modifier la liste.
- Exemple : Si
- La fonction principale
tri_insertion(l)qui trie la listel.
