Nous avons vu que les algorithmes nous permettaient de rĂ©soudre des problĂšmes plus ou moins complexes. Un des problĂšmes les plus rĂ©pandus consiste Ă trier les informations. Cela vous semble facile Ă faireâ? Et pourtantâ! Il ne nous faut pas seulement trier les informations, mais Ă©galement trouver la maniĂšre la plus efficace de le faire.
Trier une suite de 10 nombres du plus petit au plus grand nâest effectivement pas trĂšs long. Mais quâen est-il lorsque nous avons 100Â 000Â nombres Ă trierâ? Que se passe-t-il lorsque vous vous appelez Google et que vous devez trier plusieurs centaines de gigaoctets dâe-mailsâ?
Les algorithmes de tri sont lâessence mĂȘme de lâalgorithmique. En effet, nous souhaitons souvent rĂ©organiser des donnĂ©es pour les manipuler autrement. Il est donc essentiel dâen savoir un peu plus.
DĂ©couvrons ensemble un des algorithmes de tri les plus connus : le tri Ă bullesâ!
Cet algorithme progresse dans une liste dâĂ©lĂ©ments. Il compare les donnĂ©es deux Ă deux et les Ă©change si la premiĂšre valeur est plus Ă©levĂ©e que la seconde. Il fait cela pour toutes les paires dâĂ©lĂ©ments dans une liste, puis recommence au dĂ©but jusquâĂ ce que toutes les paires soient dans le bon ordre.
Faisons une dĂ©monstration avec des livresâ! Nous avons tous eu un jour ou lâautre Ă trier notre bibliothĂšque, que ce soit par ordre alphabĂ©tique, par auteur ou par hauteur. Pour cette dĂ©monstration, disons que nous trions les livres par hauteur.
Nous saisissons le premier livre et le comparons au suivant. Sâil est plus grand, nous les Ă©changeons. Sinon, nous les laissons ainsi.
Quand nous avons fini de parcourir tous les livres une premiĂšre fois, le plus grand se trouve bien Ă la fin. Nous pouvons alors recommencer un tour de boucle pour placer lâĂ©lĂ©ment suivant.
Et ainsi de suite jusquâĂ ce que la bibliothĂšque soit triĂ©eâ!
Comment lâĂ©cririons-nous en pseudo-codeâ?
Nous commençons par Ă©crire une fonction qui va parcourir tous les livres, un Ă un. Vous connaissez dĂ©jĂ cette structure : il sâagit dâune boucleâ! Nous allons donc faire 10 tours, puisque nous allons parcourir une liste de 10 livres, mais, pour changer, de la derniĂšre case Ă la premiĂšre.
Algorithme Tri_a_bulle(tableau)
taille â Taille du tableau
Pour i allant de taille - 1 jusquâĂ 1 :
âŠ
Fin Pour
FinQuand nous sommes dans la boucle, nous intervertissons les livres si le second est plus grand que le premier. Nous pouvons donc utiliser les structures conditionnelles que nous avons déjà vues.
Algorithme Tri_a_bulle(tableau)
taille â Taille du tableau
Pour i allant de taille - 1 jusquâĂ 1 :
Si tableau[i] < tableau[i-1] :
echanger(tableau[i], tableau[i-1])
Fin Si
Fin Pour
FinCeci est dĂ©jĂ trĂšs bien, mais ce nâest pas suffisant. Actuellement, chaque item a bougĂ© dâune place, mais nâest pas vraiment remontĂ© jusquâĂ la fin. Alors, comment faireâ?
Si nous rĂ©flĂ©chissons bien, il faut faire un nombre de boucles correspondant au nombre dâitems restant Ă trier dans la liste au carrĂ©.
Prenons lâexemple du premier livre. Sâil sâagit du plus grand, notre algorithme devra effectuer 9 tours de boucle afin de le positionner Ă la fin. Mais une fois que le livre est en place, il sait quâil nâa pas Ă aller jusquâĂ la fin. Il peut donc effectuer 8 tours de boucle, puis 7, puis 6 et ainsi de suite jusquâĂ 1.
En pseudo-code, nous allons le représenter ainsi :
Algorithme Tri_a_bulle(tableau)
taille â Taille du tableau
Pour i allant de taille - 1 jusquâĂ 1 :
Pour j allant de 0 jusquâĂ i - 1
Si tableau[j+1] < tableau[j] :
echanger(tableau[j+1], tableau[j])
Fin Si
Fin Pour
Fin Pour
FinLe tri Ă bulles est le plus connu de tous, mais pas le plus efficace. Dâailleurs, nous-mĂȘmes, lorsque nous devons trier des livres, nous ne comparons pas deux livres et ainsi de suite. Nous utilisons dâautres algorithmes.
Si nous avons une grande bibliothĂšque, nous pouvons dĂ©cider de la diviser en plusieurs unitĂ©s plus petites afin de les trier sĂ©parĂ©ment, et ensuite de les fusionner. Ou bien, nous nous disons : je mets les livres les plus grands et les plus petits au dĂ©but, en mĂȘme temps.
Bref, nous avons chacun notre stratĂ©gie. Il existe trop dâalgorithmes de tri diffĂ©rents pour tous les expliquer ici. Je vous propose un tableau rĂ©sumant les types de tri les plus utilisĂ©s :
Type de tri | Description |
Tri par insertion | Le tri par insertion considÚre chaque élément du tableau, et l'insÚre à la bonne place parmi les éléments déjà triés. |
Tri par sélection | Le tri par sélection est un algorithme de tri qui sélectionne à chaque itération le plus petit élément d'une liste non triée, et place cet élément au début de la liste non triée. |
Tri par tas | Le tri par tas débute par la construction d'un tas sur le tableau d'entrée. Comme l'élément maximum du tableau est stocké à la racine, on peut le placer dans sa position finale correcte en l'échangeant avec le dernier élément du tableau. |
Tri par fusion | Le tri par fusion fonctionne sur le principe de diviser pour mieux régner. Le tri par fusion décompose à plusieurs reprises une liste en plusieurs sous-listes jusqu'à ce que chaque sous-liste se compose d'un seul élément, et fusionne ces sous-listes de maniÚre à obtenir une liste triée. |
Je vous conseille nĂ©anmoins de regarder cette liste non exhaustive des diffĂ©rents tris proposĂ©s sur cette page WikipĂ©dia, et dâen lire quelques dĂ©finitions afin de mieux les comprendre.

Rappelez-vous que la porte Ă lâarrivĂ©e du labyrinthe est verrouillĂ©e Ă lâaide de 3 clĂ©s. Ces clĂ©s sont numĂ©rotĂ©es de 1 Ă 3. La clĂ© qui a le numĂ©ro 1 correspond au trou de serrure le plus haut sur la porte, la clĂ© qui a le numĂ©ro 2 Ă la suivante en dessous, et ainsi de suite. Pour Ă©viter de perdre du temps Ă lâarrivĂ©e, il serait intĂ©ressant de trier le sac Ă lâaide des numĂ©ros des clĂ©s par ordre croissant, afin de les sortir dans lâordre.
Vous devez Ă©crire le pseudo-code dâun algorithme de tri par insertion. Un tri par insertion compare les valeurs deux Ă deux, en commençant par la deuxiĂšme valeur de la liste. Si cette valeur est supĂ©rieure Ă la valeur situĂ©e Ă sa gauche, aucune modification n'est apportĂ©e. Sinon, cette valeur est dĂ©placĂ©e Ă plusieurs reprises vers la gauche jusqu'Ă ce qu'elle rencontre une valeur infĂ©rieure Ă elle.
Enregistrer la taille du tableau dans une variable  N .
Parcourir le tableau de la deuxiĂšme case Ă la fin du tableau.
Enregistrer temporairement l'élément courant de votre itération.
Comparer cet élément avec tous les éléments de la sous-liste triée.
Décaler tous les éléments de la sous-liste supérieurs à la valeur à trier.
Insérer la valeur temporaire.
Répéter jusqu'à ce que la liste soit triée.
Voici le résultat à obtenir à l'issue de l'exercice :
Algorithme Tri_par_insertion(tableau)
N â Taille du tableau
Pour i allant de 1 jusquâĂ N - 1 :
x â tableau[i]
j â i
Tant que j > 0 ET tableau[j-1] > x :
tableau[j] â tableau[j-1]
j â j - 1
Fin Tant que
tableau[j] â x
Fin Pour
FinLe tri des données est une tùche importante et largement utilisée lors du développement de logiciels.
Il existe diffĂ©rents types de tri, tels que le tri Ă bulles, le tri par sĂ©lection, le tri par insertion et bien dâautres.
Tous les algorithmes ne sont pas efficaces pour un mĂȘme problĂšme, il faudra donc choisir lâalgorithme de tri adapté au problĂšme.
Je vous ai expliquĂ© prĂ©cĂ©demment que tous les algorithmes ne sont pas adaptĂ©s Ă toutes les situations. Mais pourquoi ? En fonction du problĂšme, le temps peut ĂȘtre plus ou moins long. On parle alors de la complexitĂ© de lâalgorithme. Nous allons voir dans le prochain chapitre comment la calculer.