Algorithme de la Procédure Tri à Bulles

publicité
Lycée Pilote de Sousse 2011/2012
Tri à Bulles
Cet algorithme compare les éléments du tableau deux à deux, jusqu'à obtenir un tableau trié.
Dans ce cas la répétition de plusieurs passages sur l'ensemble des données est nécessaire
pour l'obtention d'un tri complet. Cette méthode est appelée le tri à bulles, car les éléments
mal classés remontent dans la liste comme des bulles à la surface d'un liquide.
L'algorithme parcourt le tableau, et compare les couples d'éléments successifs (t[i] et t[i+1]).
Lorsque deux éléments successifs ne sont pas dans l'ordre croissant, ils sont échangés.
A la fin de la première boucle, t[n] contient le plus grand élément du vecteur et cette n ième
composante ne doit plus être prise en compte dans la suite du tri puisqu’elle est à sa place
(alors la taille du tableau est réduite à n-1)
Après chaque parcours complet du tableau, l'algorithme recommence l'opération.
Lorsqu’aucun échange n'a lieu pendant un parcours ou la taille du tableau n=1, cela signifie
que le tableau est trié alors on arrête l'algorithme.
Exemple étape par étape
Prenons la liste de chiffres « 5 1 4 2 8 » et trions-la de manière croissante en utilisant
l'algorithme de tri à bulles. Pour chaque étape, les éléments comparés sont écrits en gras.
Première étape:
(51428)
( 1 5 4 2 8 ) Comparaison de 5 et 1 et comme 5 > 1, l'algorithme les échange.
(15428)
( 1 4 5 2 8 ) Permutation car 5 > 4.
(14528)
( 1 4 2 5 8 ) Permutation car 5 > 2.
(14258)
( 1 4 2 5 8 ) Comme 5 < 8, les éléments ne sont pas échangés.
Deuxième étape:
(14258)
( 1 4 2 5 8 ) Même principe qu'à l'étape 1.
(14258)
(12458)
(12458)
(12458)
À ce stade, la liste est triée, mais pour le détecter, l'algorithme doit effectuer un dernier
parcours.
Troisième étape:
(12458)
(12458)
(12458)
(12458)
Comme la liste est triée, aucun échange n'a lieu à cette étape, ce qui provoque l'arrêt de
l'algorithme.
Analyse de la procédure Tri à Bulles :
DEF Proc Tri_Bull ( var t : tab; n: entier)
Résultat = t
T=[] Répéter
[changer faux]
Pour i de 1 à n-1 faire
Si t[i]>t[i+1] alors
Proc Permuter (t[i],t[i+1])
Changer  vrai
FinSi
FinPour
n  n-1
Jusqu'à (n=1) ou (changer=faux)
Fin Tri_Bull
T.D.O Locaux
Objet
changer
i
Permuter
Type
Booléen
Entier
procédure
Rôle
Test de l'état de permutation
Compteur
Permutation des cases
Page 1 sur 2
Lycée Pilote de Sousse 2011/2012
Algorithme de la Procédure Tri à Bulles :
0) DEF Proc tri_bull (var t:tab ; n:entier)
1) Répéter
Changer  faux
Pour i de 1 à n-1 faire
Si t[i]>t[i+1] alors
Proc Permuter (t[i],t[i+1])
Changer  vrai
FinSi
FinPour
n  n-1
Jusqu'à (n=1) ou (change=faux)
2) Fin Tri_bull
Traduction Pascal :
Program tri_a_bulle;
Uses wincrt;
Type tab=array[1..50] of integer;
Var
T:tab;
n : integer ;
Procedure saisie(var T:tab; var n :integer);
Var
c : integer;
Begin
repeat
Write('Donner n la taille du tableau :');
readln(n);
until n in [2..50];
For c :=1 to n do
begin
Write('Donner l''élément T[',c,']=') ;
Readln(T[c]);
end;
end;
Procedure permuter( var a:integer; var b:integer);
Var
P : integer;
begin
p:=a;
a:=b;
b:=p;
end;
changer:=false;
for i:=1 to n-1 do
if T[i] > T[i+1] then
begin
permuter (T[i] ,T[i+1]);
changer:=true;
end;
n := n-1 ;
until (n=1) or (changer = false);
end;
procedure affichage(T:tab;n:integer);
var
c:integer;
begin
write('le tableau trié est : ');
for c:=1 to n do
write(T[c]:5,' | ');
end;
BEGIN
saisie(T,n);
tri_bull(T,n);
affichage(T,n);
End.
Procedure tri_bull(var T:tab; n: integer);
Var
changer : boolean;
i: integer;
begin
repeat
Page 2 sur 2
Téléchargement