Tri Ă Bulle
Soit une liste L
de n
entiers.
Soit le premier algorithme suivant :
-
On parcourt la liste en inversant
L[i]
etL[i + 1]
chaque fois queL[i] > L[i + 1]
-
On recommence tant quâil y a eu des Ă©changes au parcours prĂ©cĂ©dent.
Question 1: Créer une fonction Parcours_1(L)
qui parcours une fois L
, fait les Ă©changes
si besoin et renvoie une variable valant 1 si au moins un échange a été réalisé, 0 sinon.
Question 2: Créer la fonction Tri_bulle_1(L)
qui réalise ce tri.
Question 3: Sur un ordinateur, en faisant afficher la liste aprÚs chaque parcours, vérifier la propriété suivante : « A la fin du k-Úme parcours, les k plus grands éléments sont à leur place finale » (se démontre par récurrence)
Soit le second algorithme suivant :
-
On parcourt la liste
n â 1
fois en inversantL[i]
etL[i + 1]
chaque fois queL[i] > L[i + 1]
-
La k-Úme fois, on ne « touche pas » aux
k â 1
derniers éléments (déjà triés).
Question 4: Créer une fonction Parcours_2(L,k)
(k>0) sur la base de Parcours_1 qui
parcours la liste L sans toucher Ă ses k - 1
derniers éléments en procédant aux inversions
vues précédemment
Remarque : Pour vous aider un peu,
-
Quand
k = 1
, la fonction ne « touche pas » auk - 1 = 0
derniers Ă©lĂ©ments, elle peut donc « toucher » au dernier Ă©lĂ©ment, soit Ă©changer lâavant dernier termeL[n - 2]
et le dernierL[n - 1]
-
Quand
k = 2
, la fonction ne « touche pas » auk - 1 = 1
derniers éléments, elle ne « touchera » donc pas au dernier élémentL[n - 1]
lors dâun Ă©ventuel Ă©change entre đż[đ] et đż[đ + 1] -
Etc...
Question 5: Créer la fonction Tri_bulle_2(L) qui réalise ce tri.
Question 6: Sur un ordinateur, comparer lâefficacitĂ© de ces deux algorithmes.
Remarquez que lâinĂ©galitĂ© stricte đż[đ] > đż[đ + 1] fait que cet algorithme est stable.
Question 7: Est-il facile de se retrouver dans le pire des cas de temps dâexĂ©cution de ces algorithmes ?