1. Un algorithme de tri est une suite finie d'instructions servant à réordonner une séquence
d'éléments suivant un critère fixé à priori. Ce critère est en fait une relation d'ordre total
sur les éléments à trier.
Les algorithmes de tri que nous allons définir traitent des tableaux situés dans la mémoire
centrale.
Le tri par sélection
o Le tri à bulles
o Le tri par insertion
o Le tri par sélection
1.1. Le tri par sélection
Principe
Soit à trier un tableau de N cases, numérotés de 1 à N.
1. Chercher la position du plus petit élément du tableau.
2. L'échanger avec le contenu de la première case du tableau (case n°1)
3. Chercher la position du plus petit élément parmi les cases 2 à N
4. L'échanger avec le contenu de la deuxième case du tableau (case n°2)
Ainsi de suite, jusqu'à ne plus avoir de cases à explorer.
Remarquer qu'on constitue petit à petit "basse" du tableau triée.
Exemple 1
Function posmin(T:tab; i,n:integer):integer;
var
pm,j:integer;
begin
pm:=i;
For j:=i+1 to N do
begin
If T[j] < T[pm]
then
pm:=j;
end;
Posmin:=pm;
end;
Exemple 2
Procedure triselec (var T:tab; N:integer);
vari,p:integer;
1
2. begin
For i:=1 to N-1 do
begin
p:= posmin(t,i,n); {posmin du minimum dans T entre i et N}
if i<>p
then
permut (T[i],T[p]);
end;
end;
1.2. Le tri à bulles
Principe
1.Comparer le contenu des cases n°1 et 2
s’ils ne sont pas dans le bon ordre, les inverser.
2. Faire de même pour les cases n°2 et 3, 3et 4 .., et ainsi de suite jusqu'à (N-1 et N)
3. Si au moins une inversion a été effectuée, recommencer au début du tableau.
Les processus s'arrête lorsqu'au cours du "balayage' complet du tableau, aucune inversion
n'a été effectuée (on effectue donc toujours un "tour pour rien").
Exemple
procedure tribulle(var T:tab ; N:integer);
var
i: integer;
test: boolean;
begin
repeat
test:=false;
for i:=1 to n-1 do
begin
if t[i] > t[i+1] then
begin
permut (t[i] ,t[i+1]);
test:=true;
end;
end;
n:=n-1;
until test=false;
end;
1.3. Tri par insertion
Hypothèse:
On suppose que le tableau est partagé en: partie triée & non triéeet on ne sait rien sur la
partie non triée (au début de l'algo, la partie triée est vide).
Principe:
2
3. On prend le premier élément de la partie non triée et on l’insère à sa bonne place dans la
partie triée.
Exemple
Procedure insertion (var T:tab; N:integer);
var
i,j,tmp: integer;
begin
tmp:= t[i];
j:=i;
while (j>1) and (t[j-1]>tmp) do
begin
t[j]:= t[j-1];
j:=j-1;
end;
t[j]:= tmp;
end;
end;
3