
TP-Cours ITC 05
Tri à bulles ou «sinking Sort»
I. Généralités, premiers pas vers un algorithme
Trier des données consiste à les ranger suivant un ordre (total) défini au préalable. Cela peu être le tri des mot d’un dictionnaire suivant l’ordre alphabétique ou le tri d’un tableau d’entier selon l’ordre croissant usuel. Cet ordre total utilisé pour trier des éléments d’une structure de données sera appelé clé du tri.
On s’intéressera ici au tri par ordre croissant usuel d’une liste/d’un tableau d’entiers, c’est-à-dire que la liste
Cette propriété revient également à dire que pour tout
Mais alors, le tri à bulles ou "sinking Sort", c'est quoi au juste ?
Une première réponse dans cette "danse hongroise"
Le tri à bulles consiste à parcourir plusieurs fois le tableau
Voici l’algorithme correspondant au premier parcours du tableau :

Après le premier parcours de la liste
Notons
Exemple :


Dans cet exemple, on a appliqué un tri à bulles pour ranger par ordre croissant les éléments de la liste
Ainsi, vous l’avez compris, les parcours successifs de
Ce nombre de comparaisons sera appelé complexité de l’algorithme et nous permettra de déterminer un « temps de calcul » de notre algorithme sur un tableau/une liste de longueur
II. Fonction Python, complexité de l'algorithme
L’algorithme de tri à bulles comporte une structure de 2 «boucles imbriquées». La première boucle (
for) porte sur le numéro de parcours Nous avons vu que lors du premier parcours, on est amené à comparer
À l’aide des deux questions précédentes et de l’algorithme donné dans la partie I, écrire la fonction Python
triABulles(L:list)⟶Nonequi modifie la liste d’entiers return None).
Vous pourrez tester votre fonction sur la liste
On souhaite à présent compter le nombre de comparaisons effectuées sur des éléments de
triABulles(L). Une comparaison entre deux éléments de if L[i]>L[i+1] est effectué.
Ainsi, il y a autant de comparaisons entre éléments de
On dit que la complexité de cet algorithme est de l’ordre de
