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