Êtes-vous un étudiant de l'EPFL à la recherche d'un projet de semestre?
Travaillez avec nous sur des projets en science des données et en visualisation, et déployez votre projet sous forme d'application sur Graph Search.
Le tri par sélection (ou tri par extraction) est un algorithme de tri par comparaison. Cet algorithme est simple, mais considéré comme inefficace car il s'exécute en temps quadratique en le nombre d'éléments à trier, et non en temps pseudo linéaire. Sur un tableau de n éléments (numérotés de 0 à n-1 , attention un tableau de 5 valeurs (5 cases) sera numéroté de 0 à 4 et non de 1 à 5), le principe du tri par sélection est le suivant : rechercher le plus petit élément du tableau, et l'échanger avec l'élément d'indice 0 ; rechercher le second plus petit élément du tableau, et l'échanger avec l'élément d'indice 1 ; continuer de cette façon jusqu'à ce que le tableau soit entièrement trié. En pseudo-code, l'algorithme s'écrit ainsi : procédure tri_selection(tableau t) n ← longueur(t) pour i de 0 à n - 2 min ← i pour j de i + 1 à n - 1 si t[j] < t[min], alors min ← j fin pour si min ≠ i, alors échanger t[i] et t[min] fin pour fin procédure Une variante consiste à procéder de façon symétrique, en plaçant d'abord le plus grand élément à la fin, puis le second plus grand élément en avant-dernière position, etc. Le tri par sélection peut aussi être utilisé sur des listes. Le principe est identique, mais au lieu de déplacer les éléments par échanges, on réalise des suppressions et insertions dans la liste. L'invariant de boucle suivant permet de prouver la correction de l'algorithme : à la fin de l'étape i, le tableau est une permutation du tableau initial et les i premiers éléments du tableau coïncident avec les i premiers éléments du tableau trié. Le tri par sélection est un tri en place (les éléments sont triés directement dans la structure). Implémenté comme indiqué ci-dessus, ce n'est pas un tri stable (l'ordre d'apparition des éléments égaux n'est pas préservé). Toutefois, si l'on travaille sur une structure de données adaptée (typiquement une liste), il est facile de le rendre stable : à chaque itération, il convient de chercher la première occurrence de l'élément le plus petit de la partie non triée de la liste, et de l'insérer avant le premier élément de la partie non triée de la liste, plutôt que de l'échanger avec celui-ci.
Touradj Ebrahimi, Evgeniy Upenik, Davi Nachtigall Lazzarotto
Roland Logé, Cyril Cayron, Margaux Nathalie Dominique Larcher