Triez des informations

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 !

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
Fin

Quand 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
Fin

Ceci 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
Fin

Autres algorithmes de tri

Le 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.

À vous de jouer

Contexte

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.

Consigne

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.

Votre objectif :

  • 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.

Vérifiez votre travail

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
Fin

En résumé

  • Le 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.

Et si vous obteniez un diplĂŽme OpenClassrooms ?
  • Formations jusqu’à 100 % financĂ©es
  • Date de dĂ©but flexible
  • Projets professionnalisants
  • Mentorat individuel
Trouvez la formation et le financement faits pour vous