Vous êtes sur la page 1sur 19

Tri Rapide (QuickSort)

Ecrire un algorithme d’un module qui


permet de trier un tableau T de N
entiers positifs (N compris entre 10 et
50) dans l’ordre croissant en utilisant la
méthode de tri rapide (traitement
récursif)

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
Principe de tri rapide :
Le tri rapide appelé aussi «Tri de Hoare», c’est un algorithme
de tri considéré comme l’un des plus rapide au niveau
exécution, c’est une méthode de tri récursive.
Le principe de cette méthode est :
 Choisir un élément appelé pivot (1er élément par exemple)
 Mettre l’élément pivot à sa place définitive en procédant par
permutation d’éléments de telle sorte que tous ceux qui lui
sont inférieurs (ou égaux) soient à sa gauche et que tous
ceux qui lui sont supérieurs soient à sa droite. Cette
opération s’appelle partition
 Ensuite, nous recommençons récursivement le traitement
de tri pour chacun des sous tableaux obtenus.

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
Remarques :
 On procède le premier élément comme pivot
 Le tableau est divisé en deux parties : la première
partie contient les valeurs inférieures (ou égaux) à
l’ancienne valeur de pivot et la deuxième partie les
valeurs qui lui sont supérieures.
Pivot Ancienne valeur de pivot

Valeurs inférieures (ou Valeurs supérieures


égaux) à l’ancienne à l’ancienne valeur
valeur de pivot de pivot

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
Exemple : N=10 et T contient

10 6 13 8 19 2 1 31 3 11

 Nous allons choisir le premier élément comme pivot


 Ensuite, nous allons chercher le premier élément supérieur au pivot à
partir du 2ème élément du tableau
 Fixons cette valeur et son indice, puis commençons à chercher le
premier élément inférieur au pivot à partir du dernier élément du
tableau et allant vers la gauche
i=2 j=10

10 6 13 8 19 2 1 31 3 11

Pivot
1er élément 1er élément
sup inf

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
i=2 j=10

10 6 13 8 19 2 1 31 3 11

Pivot 1er élément sup 1er élément inf

 Permutons les valeurs trouvées et continuons la recherche du


premier élément supérieur au pivot à partir de la position 4 en
déplaçant vers la droite et la chercher du premier élément inférieur au
pivot à partir de la position 8 en déplaçant vers la gauche
i=4 j=8

10 6 3 8 19 2 1 31 13 11

Pivot 1er élément sup 1er élément inf

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
 Permutons les valeurs trouvées et continuons la recherche du
premier élément supérieur au pivot à partir de la position 6 en
déplaçant vers la droite (Cet élément n’existe pas), et la cherche du
premier élément inférieur au pivot à partir de la position 6, en
déplaçant vers la gauche. i=j=6

10 6 3 8 1 2 19 31 13 11

Pivot 1er élément inf

 Nous permutons alors cet élément avec l’élément pivot

2 6 3 8 1 10 19 31 13 11

Cet élément est maintenant à sa


place définitive

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
 Il reste à trier récursivement (de la même manière) le sous tableau dont
les indices vont de 1 à 5, puis le sous tableau dont les indices allant de 7
à 10
i=2 j=5

2 6 3 8 1 10 19 31 13 11

Pivot 1er élément sup 1er élément inf

i=3 j=4

2 1 3 8 6 10 19 31 13 11

Pivot 1er élément sup


 le premier élément inférieur au pivot à partir de la position 4 en déplaçant vers la
gauche (entre le ième et jème position) n’existe pas, Donc aucune permutation

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
 L’élément en position 3 est maintenant à sa place définitive
2 1 3 8 6 10 19 31 13 11

Cet élément est maintenant à sa


place définitive
 Il reste à trier récursivement (de la même manière) le sous tableau
dont les indices vont de 1 à 2, puis le sous tableau dont les indices
vont de 4 à 5

i=j=2

2 1 3 8 6 10 19 31 13 11

Pivot 1er élément inf

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
 Comme i=j=2, il y aura permutation entre le pivot et l’élément car il
lui est inférieur
1 2 3 8 6 10 19 31 13 11

 Nous allons s’intéresser maintenant au sous tableau dont les


indices vont de 4 à 5
i=j=5

1 2 3 8 6 10 19 31 13 11

Pivot 1er élément inf


 Comme i=j=5, il y aura permutation entre le pivot et l’élément car il
lui est inférieur
1 2 3 6 8 10 19 31 13 11

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
 Il reste à trier récursivement (de la même manière), le sous tableau
dont les indices vont de 7 à 10

1 2 3 6 8 10 19 31 13 11

Pivot

 ……………………………………………………………………………………….
 ………………………………………………………………………………………
 jusqu’à obtenir un tableau trié

1 2 3 6 8 10 11 13 19 31

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
Algorithme de la procédure Trirap
0) DEFPROC Trirap (VAR T : Tab ; deb, fin : Octet) PROC Trirap(T, deb, p - 1)
1) Si (fin > deb) Alors PROC Trirap (T, p + 1, fin)
p  deb FinSi
Pour i de deb+1 à fin Faire 2) Fin Trirap
Si (T[ i ] < T[ deb ]) Alors
pp+1
Aux  T[ i ]
T [ i ]  T[ p ]
T[ p ]  Aux
FinSi
FinPour
Aux  T[ p ]
T[ p ]  T[ deb ]
T[ deb ]  Aux

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
T.D.O.L.

Objet Type / Nature Rôle


p Octet Position de l’élément pivot
i Octet Compteur
Aux Entier Variable auxiliaire

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)

Ecrire un programme en Pascal


nommé Tri_Rapide qui permet de trier
un tableau T de N entiers positifs (N
compris entre 10 et 50), dans l’ordre
croissant en utilisant la méthode de tri
rapide

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
Programme en Pascal (Tri_Rapide)
Program Tri_Rapide ;
uses wincrt ;
type
Tab=array [1..50] of integer ;
var
n : byte ;
T : tab ;

procedure Saisir (Var n : byte );


begin
repeat
write('Saisir la taille du tableau : ');
readln(n);
until n in [10..50] ;
end;

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
// Programme en Pascal (Tri_Rapide) : Suite
procedure Remplir (Var T : Tab; n : byte);
var
i : integer ;
begin
For i:= 1 to n do
repeat
write('Saisir T[',i,'] :') ;
readln(T[i]) ;
until (T[i] >= 0) ;
end;

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
// Programme en Pascal (Tri_Rapide) : Suite
Procedure TriRap (VAR T : Tab; deb , fin : byte);
Var
p, i : byte ;
Aux : integer;
Begin
if (fin > deb) then
begin
p := deb;
for i:=deb+1 To fin Do

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
// Programme en Pascal (Tri_Rapide) : Suite
// suite de la procédure TriRap
if (T[ i ] < T[ deb ]) then
begin
p := p + 1;
Aux := T[ i ];
T[ i ] := T[ p ];
T[ p ] := Aux;
end;
Aux := T[ p ];
T[ p ] := T[ deb ];
T[ deb ] := Aux;

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
// Programme en Pascal (Tri_Rapide) : Suite
// suite de la procédure TriRap
TriRap(T, deb, p - 1);
TriRap (T, p + 1, fin);
End;
End;

PROF. Yassine Ben Salah


Tri Rapide (QuickSort)
// Programme en Pascal (Tri_Rapide) : Suite
procedure Afficher (T : Tab; n : byte ) ;
var
i : integer ;
Begin
for i:= 1 to n do
write(T[i],' | ');
End;
// Programme Principal
Begin
Saisir(n);
Remplir(T, n);
TriRap(T, 1, n);
Afficher(T, n);
End.

PROF. Yassine Ben Salah

Vous aimerez peut-être aussi