Tri Shell

Principe

Cet algorithme a été créé par Donald.L. Shell, d'où son nom.
Il est fondé sur le constat que le tri par insertion est très performant sur un tableau presque trié.
Contrairement au tri par insertion, l'algorithme de tri Shell n'effectue pas le tri du tableau en une seule passe.
  1. Le tableau est partagé en segments disjoints, dont chacun est trié selon un tri par insertion.
    Chaque segment est constitué de cases situées à une certaine distance les unes des autres ; par exemple, si la distance est 3, un segment sera constitué des cases (1, 4, 7, 10, ...), un autre segment des cases (2, 5, 8, 11, ...), etc ...
  2. Lorsque tous les segments ont été triés individuellement, le tableau est de nouveau partagé, mais en un moins grand nombre de segments.
  3. Le processus est répété jusqu'à ce que le nombre de segments soit de 1.

Algorithme

Déterminer la liste des distances à utiliser Pour Distance variant de DistanceMax à 1
Pour IDebut variant de (Distance + IMin) à IMax

Exemple

Tableau à trier : [7,5,1,9,2]

L'évolution du tableau est figurée ci-dessous
Les éléments colorés sont ceux qui constituent le sous-tableau en cours de tri.
Les éléments en gras sont ceux comparés dans le tri par insertion : la valeur est mémorisée dans la dernière colonne, comme dans le cas du tri par insertion

1 2 3 4 5 Valeur 1 2 3 4 5 Valeur
Distance = 3 Distance = 1
7 5 1 9 2 9 1 2 5 9 7   2
7 5 1 9 2 2 1 2 5 9 7 5
7 5 1 9 5 2 1 2 5 9 7 9
7 2 1 9 5 2 1 2 5 9 7 7
7 2 1 9 5 1 1 2 5 9 7 7
Distance = 2 1 2 5 9 7 7
7 2 1 9 5 1 1 2 5 9 7 7
7 2 7 9 5 1 1 2 5 9 9 7
1 2 7 9 5 1 1 2 5 7 9 7
1 2 7 9 5 5  
1 2 7 9 5 5
1 2 7 9 5 5
1 2 7 9 7 5
1 2 5 9 7 5
1 2 5 9 7 9  

Exemple de programme en Visual Basic

Variantes

Des variantes sont possibles dans la séquence des distances.

Utilisation

Ce tri est moyennement rapide ; plus rapide que le tri par insertion (de part sa définition).

Il est sensible à la répartition initiale des valeurs

Retour à la table des matières des tris


Dernière mise à jour de cette page : 12/8/2007