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 â 1fois en inversantL[i]etL[i + 1]chaque fois queL[i] > L[i + 1] -
La k-Úme fois, on ne « touche pas » aux
k â 1derniers Ă©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 = 0derniers Ă©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 = 1derniers Ă©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 ?