Vous êtes sur la page 1sur 7

Algorithmique

Durée : 2h

Tris par sélection, par insertion


Cours Page 1 / 7

Capacités attendues
1 Ecrire un algorithme de tri
Décrire un invariant de boucle qui prouve la correction des tris par insertion
2
et sélection.

I – NÉCESSITÉ DE TRIER.......................................................................................................................................................... 2
II – TRI PAR SÉLECTION.......................................................................................................................................................... 2
2.1 – PRINCIPE............................................................................................................................................................................... 2
2.2 – PSEUDO-CODE........................................................................................................................................................................4
2.3 – COMPLEXITÉ TEMPORELLE.........................................................................................................................................................4
2.4 – VALIDITÉ DU TRI......................................................................................................................................................................4
III – TRI PAR INSERTION......................................................................................................................................................... 5
3.1 – PRINCIPE............................................................................................................................................................................... 5
3.2 – PSEUDO-CODE........................................................................................................................................................................7
3.3 – COMPLEXITÉ TEMPORELLE.........................................................................................................................................................7
Algorithmique
Durée : 2h

Tris par sélection, par insertion


Cours Page 2 / 7

I – Nécessité de trier.
Les méthodes de tri sont essentielles dans la manipulation de données. En effet, pour rechercher un
élément dans une liste, il est beaucoup plus simple que ces éléments soient ordonnés. (Voir recherche par
dichotomie par exemple).

Il existe pour cela des dizaines d’algorithmes de tri et leurs variantes. Nous allons étudier ici des tris qui
s’appuient sur la comparaison deux à deux des éléments d’une liste.

Notion d’invariant de boucle  :


Un invariant est une hypothèse pouvant être vraie ou fausse. Les invariants de boucles servent, entres
autres, à prouver la correction (autrement dit la validité) d’un algorithme comportant une ou plusieurs boucles for
ou while.
Un invariant de boucle est une proposition qui :
 Est vraie avant d’entrer dans la boucle (initialisation) ;
 Reste vraie après une itération, si elle était vraie avant (conservation) ;
 Donne le résultat attendu en fin de boucle (terminaison).

Si, pour un algorithme donné, il existe un invariant, c’est-à-dire une hypothèse H qui vérifie l’initialisation, la
conservation et la terminaison, alors on dit que l’algorithme est valide.

II – Tri par sélection.


2.1 – Principe.
Le tri par sélection est un algorithme de tri par comparaison. Si on l’applique sur un tableau de n éléments
(numérotés de 0 à n-1), son principe est le suivant :

 Rechercher l’indice du plus petit (ou du plus grand) élément du tableau, à l’aide d’un parcours total, puis
échanger cet élément avec l’élément d’indice 0.
 Rechercher l’indice du deuxième plus petit élément (ou le deuxième plus grand) du tableau et échanger
l’élément concerné avec l’élément d’indice 1.
 Poursuivre ainsi jusqu’à la fin du tableau.
Algorithmique
Durée : 2h

Tris par sélection, par insertion


Cours Page 3 / 7

Au bout de plusieurs itérations…

http://lwh.free.fr/pages/algo/tri/tri_selection.html

2.2 – Pseudo-code.

Procedure tri_selection(t)
Pour i allant de 0 à longueur(t)-2
Indice_min  i
Pour j allant de i+1 à longueur(t)-1
Si t[j] < t[indice_min] alors
Indice_min  j
FinSi
FinPour
Si indice_min <> i alors
Echanger t[i] et t[indice_min]
FinSi
FinPour
Renvoyer t
Algorithmique
Durée : 2h

Tris par sélection, par insertion


Cours Page 4 / 7

2.3 – Complexité temporelle.


La complexité est évaluée en tenant compte de la double boucle « Pour ».
Si la liste comporte n éléments, il faudra alors n*(n-1)/2 comparaisons.
La complexité sera alors quadratique : O(n2).

Ce tri est considéré comme inefficace car il est peu performant, comparé à d’autres algorithmes de tri.

2.4 – Validité du tri.


Terminaison : Cet algorithme est composé de deux boucles bornées, donc cela prouve qu’il se termine
toujours.

Correction partielle : Pour montrer que l’algorithme est partiellement correct, il faut démontrer par
récurrence l’invariance de la propriété suivante au cours du déroulement de l’algorithme.
« A la fin de l’étape i, le sous-tableau[0, 1, …, i-1] est trié ».

Cette propriété est vraie au premier rang, car le sous-tableau[0], composé d’un unique élément est
nécessairement trié.
Cette propriété demeure vraie tout au long du déroulement de l’algorithme, ce qui assure qu’à la fin le
tableau tout entier sera trié.

La preuve de la terminaison associée à la correction partielle de l’algorithme prouve sa correction totale.


Algorithmique
Durée : 2h

Tris par sélection, par insertion


Cours Page 5 / 7

III – Tri par insertion.


3.1 – Principe.
Souvent utilisé par le joueur de carte et appliqué à un tableau de n éléments (numérotés de 0 à n-1), le
principe du tri par insertion est le suivant :
 Comparer le premier élément avec le deuxième. Les échanger s’ils ne sont pas dans le bon ordre.
 Comparer le troisième élément avec les éléments déjà triés à sa gauche et l’insérer directement à la
bonne place dans le sous-tableau déjà trié. Un décalage de certaines cartes vers la droite sera nécessaire
pour permettre l’insertion.
 Poursuivre jusqu’à ce que le tableau soit entièrement trié.
Algorithmique
Durée : 2h

Tris par sélection, par insertion


Cours Page 6 / 7

Au bout de plusieurs itérations…

http://lwh.free.fr/pages/algo/tri/tri_insertion.html
Algorithmique
Durée : 2h

Tris par sélection, par insertion


Cours Page 7 / 7

3.2 – Pseudo-code.

Procedure tri_insertion(t)
Pour i allant de 0 à longueur(t)-1
ji
x  t[i]
TantQue j > 0 ET t[j-1] > x
t[j]  t[j-1]
j  j-1
Fin TantQue
t[j]  x
FinPour
Renvoyer t

L’algorithme est composé d’une boucle « tant que » imbriquée dans une boucle « pour ». Pour prouver que
cet algorithme se termine, il faut trouver un variant de boucle qui décroit strictement à chaque tour de boucle.
Dans notre cas, ce variant est « n ».

3.3 – Complexité temporelle.


Dans le meilleur des cas, (tableau déjà trié), la complexité sera linéaire en O(n), car le bloc d’instruction
« tant que » n’est jamais exécuté.
Dans le pire des cas, elle sera quadratique en O(n2) pour un tableau trié à l’envers.

Vous aimerez peut-être aussi