Introduction et terminologies des algorithmes de tri

08 Apr 2020 08 Apr 2020 5406 vues ESSADDOUKI Mostafa 8 min de lecture

Algorithmes de tri : concepts fondamentaux

Définition

Un algorithme de tri est utilisé pour réorganiser les éléments d'un tableau ou d'une liste donnée selon un ordre (croissant, décroissant) en utilisant l'un des opérateurs de comparaison (<, >).

Exemple visuel
Exemple de tri
Illustration : Un tableau non trié (à gauche) et le même tableau trié par ordre croissant (à droite).

Les algorithmes de tri sont fondamentaux en informatique. Ils sont utilisés comme base pour de nombreux autres algorithmes et problèmes, et leur étude permet de comprendre des concepts importants comme la complexité, la récursivité, et l'optimisation.

Terminologies des algorithmes de tri

Qu'est-ce que le tri sur place ?

Un algorithme de tri sur place utilise un espace supplémentaire constant pour produire la sortie (modifie le tableau donné uniquement). Il trie la liste uniquement en modifiant l'ordre des éléments dans la liste d'origine.

Caractéristiques
  • Utilise un espace mémoire supplémentaire O(1) ou très limité
  • Modifie directement le tableau d'entrée
  • Exemples : tri à bulles, tri par sélection, tri par insertion, tri rapide (QuickSort), tri par tas (HeapSort)
  • Contre-exemple : tri fusion (MergeSort) nécessite un tableau temporaire
// Exemple de tri sur place : tri par sélection
void triSelection(int tab[], int n) {
    for (int i = 0; i < n-1; i++) {
        int min = i;
        for (int j = i+1; j < n; j++) {
            if (tab[j] < tab[min]) {
                min = j;
            }
        }
        // Échange (modifie le tableau original)
        int temp = tab[i];
        tab[i] = tab[min];
        tab[min] = temp;
    }
}
Avantages
  • Économie de mémoire, important pour les systèmes embarqués
  • Meilleure localité des données (cache)

Que sont les tri internes et externes ?

Lorsque nous exécutons un programme, nous demandons au processeur d'exécuter les instructions, de sorte que les instructions et les données utilisées doivent être placées dans la mémoire principale. Donc le tri interne et externe est basé sur cette idée.

Tri interne

Lorsque toutes les données sont placées en mémoire, le tri est appelé tri interne. Le processus de tri s'effectue entièrement en mémoire vive (RAM).

Exemples : Tous les algorithmes classiques (tri rapide, tri fusion, etc.)

Caractéristique : Accès rapide aux données

Tri externe

Lorsque toutes les données qui doivent être triées ne peuvent pas être placées en mémoire à la fois, le tri est appelé tri externe. Le tri externe est utilisé pour une énorme quantité de données.

Exemple : Merge sort externe (utilisé par les bases de données)

Caractéristique : Utilise des fichiers temporaires sur disque

Exemple de tri externe

Le tri externe le plus courant est une variante du tri fusion :

  1. Diviser le gros fichier en petits blocs qui tiennent en mémoire
  2. Trier chaque bloc individuellement (tri interne) et les écrire sur disque
  3. Fusionner les blocs triés pour obtenir le fichier final trié

Cette technique est utilisée par les systèmes de gestion de bases de données pour trier des tables contenant des millions d'enregistrements.

Stabilité des algorithmes de tri

La stabilité est principalement importante lorsque nous avons des paires clé-valeur avec des clés en double possibles (comme les noms de personnes en tant que clés et leurs détails en tant que valeurs). Et nous souhaitons trier ces objets par clés.

Un algorithme de tri est dit stable si deux objets avec des clés égales apparaissent dans le même ordre en sortie triée que dans le tableau d'entrée à trier.

Exemple de stabilité
Entrée
Étudiants triés par nom : 
(Alice, 20 ans), (Bob, 22 ans), (Alice, 19 ans), (Charlie, 21 ans)
Sortie (tri stable par prénom)
(Alice, 20 ans), (Alice, 19 ans), (Bob, 22 ans), (Charlie, 21 ans)

L'ordre des deux Alice est préservé (la première Alice reste avant la seconde)

Nous soucions-nous des tableaux simples comme un tableau d'entiers ?

Lorsque des éléments égaux sont indiscernables, comme avec des entiers, ou plus généralement, toutes les données où l'élément entier est la clé, la stabilité n'est pas un problème. La stabilité n'est pas non plus un problème si toutes les clés sont différentes.

Pouvons-nous rendre stable n'importe quel algorithme de tri ?

Tout algorithme de tri donné qui n'est pas stable peut être modifié pour être stable. Il peut y avoir des moyens spécifiques à l'algorithme de tri pour le rendre stable, mais en général, tout algorithme de tri basé sur la comparaison qui n'est pas stable par nature peut être modifié pour être stable en changeant l'opération de comparaison de clés de sorte que la comparaison de deux clés tienne compte de la position comme facteur pour des objets avec des clés égales.

AlgorithmeStable ?Explication
Tri à bullesOuiÉchange seulement des éléments adjacents, préserve l'ordre des égaux
Tri par insertionOuiInsère les éléments en préservant l'ordre relatif
Tri fusion (MergeSort)OuiSi implémenté correctement (en cas d'égalité, prendre de la gauche d'abord)
Tri rapide (QuickSort)NonLe partitionnement peut changer l'ordre des éléments égaux
Tri par sélectionNonL'échange peut déplacer un élément devant un autre égal
Tri par tas (HeapSort)NonLa construction du tas ne préserve pas l'ordre
Quand la stabilité est-elle importante ?
  • Tri par plusieurs clés (ex: trier par nom, puis par âge)
  • Bases de données (préserver l'ordre après plusieurs tris)
  • Algorithmes qui utilisent le tri comme étape intermédiaire

Comparaison des principaux algorithmes de tri

AlgorithmeComplexité (moyenne)Complexité (pire cas)MémoireStableSur place
Tri à bullesO(n²)O(n²)O(1)OuiOui
Tri par insertionO(n²)O(n²)O(1)OuiOui
Tri par sélectionO(n²)O(n²)O(1)NonOui
Tri rapide (QuickSort)O(n log n)O(n²)O(log n)NonOui
Tri fusion (MergeSort)O(n log n)O(n log n)O(n)OuiNon
Tri par tas (HeapSort)O(n log n)O(n log n)O(1)NonOui
Résumé
  • Tri interne : toutes les données en mémoire (la plupart des algorithmes classiques)
  • Tri externe : données trop volumineuses pour tenir en mémoire (utilise des fichiers temporaires)
  • Tri stable : préserve l'ordre relatif des éléments égaux
  • Tri sur place : utilise peu de mémoire supplémentaire (O(1) ou O(log n))

Exemples d'application selon les besoins

 Scénario 1 : Petites données

Pour trier de petits tableaux (n < 50), le tri par insertion est souvent le plus efficace car il a une faible constante et est stable.

 Scénario 2 : Grandes données

Le tri rapide (QuickSort) est généralement le plus rapide en pratique pour les grands tableaux, mais attention au pire cas.

 Scénario 3 : Données volumineuses

Pour des données qui ne tiennent pas en mémoire, il faut utiliser un tri externe (généralement basé sur le tri fusion).

 Scénario 4 : Besoin de stabilité

Si l'ordre des éléments égaux est important, il faut choisir un algorithme stable comme le tri fusion ou le tri par insertion.

Points clés à retenir
  • Un algorithme de tri sur place modifie directement le tableau d'entrée avec peu de mémoire supplémentaire.
  • Le tri est dit interne si toutes les données tiennent en mémoire, externe sinon.
  • Un tri stable préserve l'ordre relatif des éléments égaux.
  • La stabilité est cruciale pour le tri par plusieurs clés et dans les bases de données.
  • Le choix d'un algorithme de tri dépend de la taille des données, de la mémoire disponible, du besoin de stabilité, et des performances attendues.
  • En pratique, les implémentations de sort() dans les langages modernes utilisent souvent un hybride (ex: introsort qui combine quicksort, heapsort et insertion sort).
Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.