Académique Documents
Professionnel Documents
Culture Documents
2
Classe : 4ème Sciences de l’informatique Module : Les algorithmes de tri
V. Tri shell
V.1. Présentation :
C'est une variante du tri par insertion. Dans ce tri, les éléments sont décalés de plusieurs éléments. La
distance qui les sépare est appelée "pas". A chaque étape le tableau est affiné (mieux organisé) et le pas
réduit. Lorsque le pas est de 1, cela revient à un tri par insertion.
Le choix du « PAS » ne doit pas s'effectuer n'importe comment. En effet, les valeurs des différents pas
successifs ne doivent pas, pour des raisons de plus grande efficacité, être multiples des autres et il faut
absolument réaliser l'étape ou le pas est égal à un. La formule la plus couramment utilisée pour calculer la
valeur des pas successifs est la suivante
Un+1=3Un+1 avec U0=0
Soit N le nombre d'éléments du tableau et P le pas (le pas doit être tel que p<n). Certains algorithmes
imposent la taille des pas successifs, qui sont, par exemple, écrits en dur au sein du programme.
L'inconvénient est que le nombre de valeurs à trier peut être bien supérieur au plus grand pas prévu par la
personne ayant implémenté l'algorithme. La version qui est proposée ici préfère calculer, à l'aide de la
formule donnée ci-dessus, le plus grand pas P tel que P<N. Pour trouver les autres valeurs successives de p,
il suffit, à chaque étape, de diviser P par 3 (division entière).
Exemple:
Grandeurs successives de P pour N=100, calcul du plus grande valeur de p tel que p<100 :
U0=0
U1=3U0+1=1
U2=3U1+1=4
U3=3U2+1=13
U4=3U3+1=40
2
Classe : 4ème Sciences de l’informatique Module : Les algorithmes de tri
U5=3U4+1=121
Conclusion: La plus grande valeur de P tel que p<100 est 40. Les valeurs successives du pas P seront alors :
(ou la division par 3 est une division entière).
P1= 121/3= 40
P2= P1/3= 40/3=13
P3= P2/3= 13/3=4
P4= P3/3= 4/3=1
2
Classe : 4ème Sciences de l’informatique Module : Les algorithmes de tri
0) DEF PROC TRI_FUSION (T1, T2: TAB ; N1, N2: ENTIER ; VAR T : TAB) T.D.O.L
1) C0, C11, C21 Type /
Répéter Objet
Nature
CC+1 C Entier
Si (T1 [C1]< T2[C2])Alors C1 Entier
T[C] T1 [C1] C2 Entier
C1C1 +1
Sinon
T[C] T2 [C2]
C2C2 +1
Fin si
Jusqu’à ((C1>N1) OU (C2>N2))
2) Si (C1 > N1) Alors
Pour i de C2 à N2 Faire
CC+1 T[C] T2 [i]
Fin pour
Sinon
Pour i de C1 à N1 Faire
CC+1 T[C] T1 [i]
Fin pour
3) Fin TRI_FUSION
Remarque : Un algorithme de tri par fusion récursif est très pratique. En effet, les deux sous
tableaux seront eux même triés à l'aide de même algorithme de tri fusion. Un tableau ne
comportant qu'un seul élément sera considéré comme trié : c'est la condition de fin du tri (arrêt).
2. Une Solution
L’idée de l’algorithme est très simple. Etant donné un vecteur d’éléments à trier :
1. Choisir un élément arbitraire du tableau, que nous appelons élément pivot.
2. Réorganiser les éléments du tableau de sorte que tous les éléments inférieurs au pivot
soient à gauche du pivot, les éléments supérieurs au pivot soient à droite du pivot,
ceux qui sont égaux soit à gauche soit à droite et le pivot choisi entre les deux. Cette
opération s’appelle partition.
3. Trier récursivement la partie gauche et la partie droite du tableau jusqu’à obtenir
uniquement des sous tableaux à un seul élément.
2
Classe : 4ème Sciences de l’informatique Module : Les algorithmes de tri
Pivot
T 6 8 13 19 2 1 31 3 11
10
1 2 3 I=4 5 6 7 8 J=9 10
Pivot
T 6 8 13 19 2 1 31 3 11
10
G P
On contenue le balayage par la gauche et le balayage par la droite tant que les
éléments sont bien placés en échangeant à chaque fois les éléments mal placés.
1 2 3 4 I=5 6 J=7 8 9 10
Pivot
T 6 8 3 19 2 1 31 13 11
10
G P
La construction des deux sous listes est terminée quand l’indice (i) montant devient
égal à l’indice descendant (j).
1 2 3 4 5 I=J=6 7 8 9 10
Pivot
T 6 8 3 1 2 19 31 13 11
10
1 2 3 4 5 I=J=6 7 8 9 10
T 2 6 8 3 1 10 19 31 13 11
Le pivot est à sa place définitive. Il reste à trier récursivement (de la même manière) la
liste1 et la liste2
2
Classe : 4ème Sciences de l’informatique Module : Les algorithmes de tri
Si (L<M) Alors
AuxT[L]
T[L]T[M]
T[M]Aux
LL+1
MM-1
Fin si
Jusqu’à (M<=L)
Si (T[g]<T[M])Alors
MM-1
Fin si
AuxT[g]
T[g]T[M]
T[M]Aux