![]() |
||
![]() |
![]() |
![]() |
L'algorithme du tri bulle - ou bubble sort - consiste à regarder les différentes valeurs adjacentes d'un tableau, et à les permuter si le premier des deux éléments est supérieur au second. L'algorithme se déroule ainsi : les deux premiers éléments du tableau sont comparés, si le premier élément est supérieur au second, une permutation est effectuée. Ensuite, sont comparés et éventuellement permutés les valeurs 2 et 3, 3et 4 jusque (n-1) et n. Une fois cette étape achevée, il est certain que le dernier élément du tableau est le plus grand. L'algorithme reprend donc pour classer les (n-1) éléments qui précédent. L'algorithme se termine quand il n'y a plus de permutations possibles. Pour classer les n valeurs du tableau, il faut, au pire, effectuer l'algorithme n fois.
Cet algorithme porte le nom de tri bulle car, petit à petit, les plus grands éléments du tableau remontent, par le jeu des permutations, en fin de tableau. Dans un aquarium il en va de même : les plus grosses bulles remontent plus rapidement à la surface que les petites qui restent collés au fond.
Evolution du tableau au fil de l'algorithme (en bleu, les éléments qui sont comparés, et éventuellement premutés, pour passer à la ligne suivante).
| 5 | 3 | 1 | 2 | 6 | 4 |
| 3 | 5 | 1 | 2 | 6 | 4 |
| 3 | 1 | 5 | 2 | 6 | 4 |
| 3 | 1 | 2 | 5 | 6 | 4 |
| 3 | 1 | 2 | 5 | 6 | 4 |
| 3 | 1 | 2 | 5 | 4 | 6 |
| 1 | 3 | 2 | 5 | 4 | 6 |
| 1 | 2 | 3 | 5 | 4 | 6 |
| 1 | 2 | 3 | 5 | 4 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 |
L'algorithme se termine car il n'y a plus de permutations possibles. Ce fait sera constaté grace à un dernier parcours du tableau ou aucune permutation n'a lieu.
| Pseudo langage | |||||||
| C / C++ | Caml | Java | OCaml | ||||
| Caml (listes) | OCaml (listes) | ||||||
Considérons la complexité, en nombre d'opérations du tri bulle, pour un tableau ou une liste de n éléments. Dans le pire des cas, ce qui correspond à un tableau préalablement trié de manière décroissante, il a des permutations jusqu'à ce que la liste ait été parcourue (n-1) fois.
Dans le cas du tri bulle non optimisé, cela reviens à faire (n-1) fois (n-1) comparaisons (et quelques permutations). Soit une complexité proportionnelle à (n-1)2=n2-2n+1, soit en O(n2).
Dans le cas du tri bulle optimisé, le nombre de comparaisons est donné grace au calcul suivant, soit une complexité moins élevée, mais toujours en O(n2)
![]() |
||
![]() |
![]() |
![]() |