Menu
Coddy logo textTech

Tri à bulles

Dernière mise à jour

Le tri à bulles parcourt la liste de façon répétée, compare chaque paire d'éléments adjacents et les échange s'ils sont dans le mauvais ordre. Après chaque passe complète, la plus grande valeur restante a « remonté » comme une bulle jusqu'à sa position correcte à la fin, si bien que chaque passe examine un élément de moins. Appuyez sur lecture ci-dessus pour observer les comparaisons et les échanges, ou avancez pas à pas.

C'est l'un des algorithmes de tri les plus simples à comprendre, ce qui en fait un excellent premier algorithme, mais son temps d'exécution O(n²) le rend impraticable pour de grandes entrées.

Complexité temporelle et spatiale

CasComplexitéRemarques
Meilleur casO(n)Déjà trié, avec une vérification de sortie anticipée
Cas moyenO(n²)Ordre aléatoire
Pire casO(n²)Trié à l'envers
EspaceO(1)En place, seulement une variable temporaire
StableOuiLes éléments égaux conservent leur ordre relatif

Étape par étape

ÉtapeCe qui se passe
1Commencez au début du tableau.
2Comparez l'élément courant avec le suivant.
3S'ils sont dans le mauvais ordre, échangez-les.
4Avancez d'une position vers la droite et répétez jusqu'à la fin (une passe).
5Répétez les passes ; chaque passe fixe un élément de plus à la fin.
6Arrêtez quand une passe complète ne fait aucun échange.

Exemple résolu

Tri de [5, 2, 4, 1] :

PasseTableauAction
1[2, 4, 1, 5]Échange 5,2, puis 5,4, puis 5,1 ; le 5 remonte jusqu'à la fin.
2[2, 1, 4, 5]2,4 dans l'ordre ; échange 4,1 ; 4,5 dans l'ordre ; le 4 est placé.
3[1, 2, 4, 5]Échange 2,1 ; le reste est déjà dans l'ordre ; le 2 est placé.
4[1, 2, 4, 5]Une passe complète ne fait aucun échange, donc le tableau est trié et l'algorithme s'arrête.

Quand utiliser le tri à bulles

Utilisez-le quandÉvitez-le quand
Vous enseignez ou apprenez le fonctionnement des tris par comparaisonVous triez de grandes entrées, où O(n²) est bien trop lent
L'entrée est minuscule ou presque triée (avec sortie anticipée, il s'approche de O(n))Vous avez besoin du tri généraliste le plus rapide - utilisez quicksort ou merge sort
Vous voulez un tri stable, en place, avec quasiment aucun codeLes données sont dans un ordre aléatoire et la performance compte
Vous détectez si une liste courte est déjà triée en une seule passeLes écritures nombreuses sont coûteuses (ex. mémoire flash) ; le tri par sélection fait moins d'échanges

Code de Bubble Sort

Une implémentation propre et exécutable de Bubble Sort en Python, JavaScript, Java, C++, C. Choisissez un langage, copiez le code ou ouvrez-le préchargé dans le Playground Coddy.

Code de Bubble Sort en Python

Python
1def bubble_sort(a):2    n = len(a)3    for i in range(n - 1):4        swapped = False5        for j in range(n - 1 - i):6            if a[j] > a[j + 1]:7                a[j], a[j + 1] = a[j + 1], a[j]8                swapped = True9        if not swapped:10            break  # no swaps means the list is already sorted11    return a12
13
14nums = [5, 1, 4, 2, 8]15print("Before:", nums)16bubble_sort(nums)17print("After: ", nums)
Exécutez ce code dans le Playground Python

FAQ sur le tri à bulles

Quelle est la complexité temporelle du tri à bulles ?
Le tri à bulles s'exécute en temps O(n²) dans les cas moyen et pire à cause des boucles imbriquées. Avec une optimisation de sortie anticipée, il peut atteindre O(n) sur un tableau déjà trié. Il utilise O(1) d'espace supplémentaire.
Le tri à bulles est-il stable ?
Oui. Le tri à bulles n'échange les éléments adjacents que lorsqu'ils sont strictement dans le mauvais ordre, si bien que les éléments égaux ne se dépassent jamais et conservent leur ordre relatif d'origine.
Pourquoi l'appelle-t-on tri à bulles ?
À chaque passe, la plus grande valeur non triée se déplace pas à pas vers la fin du tableau, comme une bulle qui remonte à la surface - d'où le nom « tri à bulles ».
Quelle est la différence entre le tri à bulles et le tri par insertion ?
Les deux s'exécutent en O(n²), sont stables et en place, mais déplacent les données différemment : le tri à bulles échange de façon répétée les paires adjacentes mal ordonnées, tandis que le tri par insertion prend chaque élément et le glisse à sa bonne place dans le préfixe trié. Le tri par insertion effectue généralement moins d'écritures et est plus rapide en pratique, surtout sur des données presque triées.
Quand devrais-je utiliser le tri à bulles plutôt que quicksort ?
Presque jamais pour des charges réelles - le temps moyen O(n log n) de quicksort écrase le O(n²) du tri à bulles sur tout sauf des entrées minuscules. Le tri à bulles ne vaut la peine que lorsque la liste est très petite ou presque triée, ou quand vous voulez le tri stable le plus simple possible pour enseigner.
L'optimisation de sortie anticipée change-t-elle le pire cas du tri à bulles ?
Non. Suivre si une passe a effectué un échange permet au tri à bulles de s'arrêter tôt et d'atteindre O(n) sur une entrée déjà triée, mais un tableau trié à l'envers nécessite toujours toutes les comparaisons, donc le pire cas reste O(n²). L'optimisation n'aide que le meilleur cas et les cas presque triés.
Coddy programming languages illustration

Maîtrisez les algorithmes avec Coddy

COMMENCER