logo

Le tri par sélection

Le principe du tri par sélection/échange (ou tri par extraction) est d'aller chercher le plus petit élément du vecteur pour le mettre en premier, puis de repartir du second élément et d'aller chercher le plus petit élément du vecteur pour le mettre en second, etc...

L'animation ci-après détaille le fonctionnement du tri par sélection :

Démonstration du tri par sélection

  1. PROCEDURE tri_Selection ( Tableau a[1:n])
  2.     POUR i VARIANT DE 1 A n - 1 FAIRE
  3.         TROUVER a[j] le plus petit élément du Tableau a[i:n];
  4.         ECHANGER a[j] et a[i];
  5. FIN PROCEDURE;

Correction de l'algorithme de tri par selection

Dans notre algorithme de tri par selection, l'invariant de boucle est "Le tableau a[1:i+1] est trié" :

INITIALISATION : La valeur avant de rentrer dans la boucle est i=0, donc le tableau a[1:1] contient un seul élément. Un tableau contenant un seul élément est forcément trié (trivial), notre invariant "le tableau a[1:i+1] est trié" est donc vrai.

CONSERVATION : si l'invariant de boucle est vrai avant une itération de la boucle : "Le tableau a[1:i] est trié", alors il le reste à la fin de l'itération : "Le tableau a[1:i+1] est trié".
Le tableau a[1:i] est trié et tous ses éléments sont plus petits ou égaux que les éléments du tableau a[i+1:n], donc le plus petit élément de a[i+1:n] sera le plus grand élément de a[1:i] et après ECHANGE cet élément sera a[i+1], donc le tableau a[1:i+1] sera évidemment trié.

TERMINAISON : La dernière valeur prise de i dans la boucle est i=n-1, donc le tableau a[1:n] sera trié.

Cette démonstration nous permet d'affirmer que l'algorithme de tri par selection est correct.

Complexité de l'algorithme de tri par selection

Pour évaluer la complexité d'un algorithme il faut envisager le pire des cas, ici lorsque la liste est classée dans l'ordre décroissant.

On suppose que notre liste à n éléments, on va essayer de compter le nombres d'opérations nécessaires pour obtenir la liste triée.

Il y a n-1 boucles :

Soit au total, (n+1)+n+(n-1)+...+3=(n-1)(n+4)/2 (propriété des sommes des suites arithmétiques)

Donc la complexité est de l'ordre de n2, on dira que le coût est quadratique.

Interprétation

Un exercice

On utilise un algorithme de tri de coût quadratique. Il met 3 secondes pour trier un liste de 10 000 nombres.
Quel sera le temps approximativement pour trier 20 000 nombres ?

Solution
On calcule le rapport des nombres d'éléments de chaque liste : pour passer de 10 000 à 20 000 on multiplie par 2.
Donc le temps sera multiplié par 2² = 4. Soit 3 × 4 = 12 secondes.