Tri par sélection
Le tri par sélection consiste à découper la liste en deux parties :
Une partie triée située en début de liste
Une partie non triée située en fin de liste
Initialement, la première partie est vide. Afin de la faire grossir, on va chercher dans la partie non triée la valeur la plus petite.
Une fois trouvée, elle est échangée avec la première valeur de la partie non triée, et la zone de la parte triée est étendue jusqu'à cette nouvelle valeur.

Une animation en ligne permet également de visualiser l'algorithme. Bien sélectionner « SEL » en haut.
Méthode : Programmation
Pour réalise le tri par sélection, il faut séparer les étapes en fonctions pour simplifier le programme final :
Une première fonction
echangequi permet d’échanger les éléments de la liste ;
Une deuxième fonction
indice_minqui renvoie l'indice de la valeur minimale de la liste à partir d'un certain indice ;La fonction principale,
tri_selection, qui trie la liste.
Voici plus en détail les fonctions spécifiées.
La fonction
echange, prend en paramètres, la liste, et 2 indices et inverse les valeurs à ces indices.Exemple : Si
l = [1, 6, 4, 2], alorsechange(l, 1, 2)modifiel, etlvaut.[1, 4, 6, 2]
echange(l, i, j):
Enregistrer l[i] dans une variable valeur_i
Enregistrer l[j] dans une variable valeur_j
Mettre valeur_i dans l[j]
Mettre valeur_i dans l[j]
La fonction
indice_min, prend en paramètres, la liste et un indice et renvoie l'indice du minimum après l'indice (inclus) passé en paramètre.Exemple : Si
l = [1, 6, 4, 2], alorsindice_min(l, 1)regarde la valeur minimale à partir de l'indice 1 (valeur 6) et trouve 2 comme valeur minimale. La fonction renvoie donc 3 (l'indice de la valeur 2).
indice_min(l, i):
i_min prend la valeur de i
Pour j allant de i + 1 à la longueur de l:
Si l[j] > l[i_min] alors:
i_min prend la valeur de j
renvoyer i_min
La fonction tri_selection prend en paramètres la liste et la trie en place, en utilisant la méthode du tri par sélection.
Exemple : Si
l = [1, 6, 4, 2], alorstri_selection(l)modifiel, etlvaut.[1, 2, 4, 6]
tri_selection(l):
Pour i allant de 0 à la longueur de l:
indice prend la valeur de indice_min(l, i)
on appelle echange avec l, indice et i