đ Cours : Les algorithmes de tri
1. đ Quâest-ce quâun tri en informatique ?
En informatique, on manipule trÚs souvent des données : des nombres, des mots, des objets, des dates, etc. Lorsque ces données sont rangées dans un certain ordre, il est beaucoup plus facile et rapide :
- dâeffectuer des recherches,
- de repĂ©rer des valeurs importantes (minimum, maximumâŠ),
- de faire des statistiques,
- ou encore dâorganiser des informations dans un tableau ou un programme.
đ Câest pour cela quâon utilise des algorithmes de tri.
Exemples concrets oĂč le tri est essentiel :
- ranger les messages sur un téléphone par date,
- classer des photos par nom ou par année,
- organiser un classement sportif du meilleur au moins bon,
- trier des produits par prix croissant sur un site dâachat.
đŻ DĂ©finition
Un tri est une opĂ©ration qui consiste Ă rĂ©ordonner les Ă©lĂ©ments dâune liste selon un critĂšre prĂ©cis.
Exemples de critĂšres :
- du plus petit au plus grand (croissant),
- du plus grand au plus petit (décroissant),
- ordre alphabĂ©tique (A â Z),
- ordre chronologique (du plus ancien au plus récent).
đ Le mot algorithme signifie simplement une suite dâinstructions prĂ©cises que lâordinateur peut exĂ©cuter pour obtenir un rĂ©sultat.
đŠ Les structures manipulĂ©es : les listes
Les algorithmes de tri sâappliquent Ă des listes ou tableaux. Une liste est une suite ordonnĂ©e dâĂ©lĂ©ments, par exemple :
[12, 5, 9, 3, 14]
["Alice", "Brian", "Clara"]
Chaque élément de la liste a :
- une valeur (ex : 12),
- une position (ex : 12 est Ă la position 0).
Quand on applique un tri, on modifie lâordre des valeurs, mais on garde les mĂȘmes Ă©lĂ©ments.
đ Tri "manuel" vs tri algorithmique
Les humains trient instinctivement :
- un paquet de cartes,
- leurs fichiers dans un classeur,
- les vĂȘtements dans une armoire.
Mais lâordinateur, lui, ne peut pas "voir" ou "comprendre". Il doit appliquer une mĂ©thode claire, rĂ©pĂ©titive, automatisable.
đ DâoĂč lâimportance des algorithmes de tri.
đ§© Plusieurs familles de tris
Il existe beaucoup dâalgorithmes de tri (tri rapide, tri Ă bulles, tri fusion, tri tasâŠ). Chacun a ses avantages et inconvĂ©nients (vitesse, simplicitĂ©, consommation mĂ©moireâŠ).
Pour les élÚves de PremiÚre, on étudie surtout deux tris :
- le tri par sélection,
- le tri par insertion.
2. đ· Le tri par sĂ©lection
Le tri par sĂ©lection (en anglais selection sort) est un des algorithmes de tri les plus simples Ă comprendre. Il est souvent Ă©tudiĂ© en premier parce quâil illustre trĂšs bien les concepts de parcours de liste, de comparaison, et de permutation.
đŻ IdĂ©e gĂ©nĂ©rale
Le principe est le suivant :
- On recherche le plus petit élément de la liste.
- On échange cet élément avec celui de la premiÚre position.
- On recommence sur la sous-liste restante (tous les éléments sauf le premier).
- On rĂ©pĂšte jusquâĂ ce que tous les Ă©lĂ©ments soient rangĂ©s.
Autrement dit, Ă chaque Ă©tape, on sĂ©lectionne (dâoĂč le nom) lâĂ©lĂ©ment le plus petit parmi ceux qui ne sont pas encore triĂ©s.
đ§ Pourquoi ce nom ?
L'algorithme sĂ©lectionne successivement les plus petits Ă©lĂ©ments pour les mettre au bon endroit. Il ne construit pas une liste triĂ©e en avançant : il place dâabord ce qui doit ĂȘtre au dĂ©but, puis ce qui doit suivre, etc.
đ Exemple dĂ©taillĂ© : trier la liste [7, 3, 5, 2]
On va suivre pas Ă pas ce que fait lâalgorithme.
†Ătape 1 : trouver le minimum de toute la liste
La liste est : [7, 3, 5, 2]
Le plus petit élément est 2.
đ On Ă©change 2 avec le premier Ă©lĂ©ment (7).
Nouvelle liste :
[2, 3, 5, 7]
†Ătape 2 : trier la sous-liste Ă partir de la position 1
Sous-liste : [3, 5, 7]
Le plus petit élément est 3, qui est déjà à sa place.
La liste ne change pas :
[2, 3, 5, 7]
†Ătape 3 : trier la sous-liste Ă partir de la position 2
Sous-liste : [5, 7]
Le plus petit est 5, déjà en position.
Rien ne change.
†Ătape 4 : le dernier Ă©lĂ©ment
Le dernier élément est forcément le plus grand restant. Plus rien à faire.
đ La liste est triĂ©e :
[2, 3, 5, 7]
𧩠Représentation schématisée
[7, 3, 5, 2]
â
(minimum = 2)
Ⳡéchange avec 7
[2, 3, 5, 7]
â
(minimum = 3)
[pas dâĂ©change]
[2, 3, 5, 7]
â
(minimum = 5)
[pas dâĂ©change]
[2, 3, 5, 7]
đ Comment fonctionne lâalgorithme Ă chaque tour ?
Pour chaque position i dans la liste :
- on suppose que la plus petite valeur se trouve en position i ;
- on parcourt les positions qui suivent (i+1, i+2, âŠ) pour vĂ©rifier si un Ă©lĂ©ment plus petit existe ;
- si on le trouve, on retient sa position ;
- Ă la fin du parcours, on Ă©change lâĂ©lĂ©ment trouvĂ© avec celui de la position i.
đ Câest un algorithme qui nĂ©cessite deux boucles :
- une boucle extĂ©rieure qui fixe la position oĂč doit aller le prochain plus petit,
- une boucle intérieure qui cherche le minimum.
đŠ Avantages et inconvĂ©nients
âïž Avantages
- TrÚs simple à comprendre et à implémenter.
- RĂ©alise trĂšs peu dâĂ©changes (au maximum n Ă©changes pour n Ă©lĂ©ments).
â InconvĂ©nients
- Il faut parcourir toute la liste pour chaque position â lent si la liste est longue.
- Ne sâadapte pas bien aux listes dĂ©jĂ presque triĂ©es : il fera quand mĂȘme les mĂȘmes comparaisons.
3. đ¶ Le tri par insertion (Version dĂ©veloppĂ©e)
Le tri par insertion (en anglais insertion sort) est un algorithme de tri trÚs intuitif, souvent expliqué en comparant son fonctionnement avec la maniÚre dont on trie des cartes à jouer dans sa main.
đŻ IdĂ©e gĂ©nĂ©rale
On considĂšre quâune partie de la liste (au dĂ©but, juste le premier Ă©lĂ©ment) est dĂ©jĂ triĂ©e.
Ensuite, pour chaque nouvel élément de la liste :
- On le compare avec les éléments déjà triés ;
- On le dĂ©place vers la gauche jusquâĂ trouver sa juste place ;
- On lâinsĂšre lĂ oĂč il doit aller.
đ De cette maniĂšre, la partie gauche de la liste est toujours triĂ©e, et elle grandit Ă chaque Ă©tape.
đ Exemple concret : comme trier des cartes
Quand on reçoit des cartes dans un jeu :
- On commence avec une carte â câest triĂ©.
- On prend la seconde â on la met avant ou aprĂšs selon sa valeur.
- On prend la troisiĂšme â on la glisse au bon endroit, mĂȘme sâil faut bouger les autres cartes.
- Et ainsi de suite.
Le tri par insertion fait exactement la mĂȘme chose, mais avec des nombres dans une liste.
đ Exemple dĂ©taillĂ© : trier la liste [7, 3, 5, 2]
On va construire progressivement une partie triée à gauche.
†Ătape 0 : point de dĂ©part
On considÚre que [7] est déjà trié.
†Ătape 1 : insĂ©rer 3
On compare 3 avec les éléments de la partie triée ([7]) :
- 3 < 7 â on dĂ©place 7 vers la droite
- On place 3 Ă sa place
Résultat :
[3, 7, 5, 2]
†Ătape 2 : insĂ©rer 5
On compare 5 Ă 7 puis Ă 3 :
- 5 < 7 â on dĂ©cale 7 Ă droite
- 5 > 3 â sa place est ici
Résultat :
[3, 5, 7, 2]
†Ătape 3 : insĂ©rer 2
On compare 2 Ă 7 â dĂ©placer 7 On compare 2 Ă 5 â dĂ©placer 5 On compare 2 Ă 3 â dĂ©placer 3 Puis on place 2 au dĂ©but.
Résultat final :
[2, 3, 5, 7]
𧩠Schéma illustré
[7 | 3, 5, 2] â 3 s'insĂšre â [3, 7 | 5, 2]
[3, 7 | 5, 2] â 5 s'insĂšre â [3, 5, 7 | 2]
[3, 5, 7 | 2] â 2 s'insĂšre â [2, 3, 5, 7]
La partie à gauche de la barre (|) est toujours triée.
đ Le fonctionnement dĂ©taillĂ©
Pour chaque position i de la liste :
- On retient la valeur à insérer :
valeur = liste[i] - On parcourt les éléments à gauche de
ien partant dei-1 - Tant que la valeur est plus petite, on décale les éléments vers la droite
- On place la valeur au bon endroit.
đ Cet algorithme nĂ©cessite aussi deux boucles :
- une boucle extérieure pour parcourir la liste,
- une boucle intérieure pour déplacer les éléments.
đŠ Avantages et inconvĂ©nients
âïž Avantages
- TrÚs efficace quand la liste est déjà presque triée.
- Simple Ă comprendre et trĂšs naturel.
- Fonctionne "en ligne" : à chaque élément ajouté, la liste reste triée.
â InconvĂ©nients
- Peut ĂȘtre lent si la liste est trĂšs dĂ©sordonnĂ©e.
- NĂ©cessite parfois beaucoup de dĂ©placements dâĂ©lĂ©ments.