Tri par échange (bulles)
Tri_{bulles}(n) = O(n^2)
Comparaison et échange successifs
Définition :
Tri à bulles : algorithme de tri qui compare les éléments adjacents et les échange s'ils sont dans le mauvais ordre, faisant "remonter" progressivement les éléments plus grands.
Principe :
🔁 Comparer couples adjacents
↔️ Échanger si nécessaire
🔄 Répéter jusqu'à tri complet
📈 Plus grand élément remonte
↔️ Échanger si nécessaire
🔄 Répéter jusqu'à tri complet
📈 Plus grand élément remonte
Complexité :
✅ Meilleur cas : O(n)
❌ Pire cas : O(n²)
📊 Moyen : O(n²)
❌ Pire cas : O(n²)
📊 Moyen : O(n²)
Tri par sélection
Sélection : trouver le minimum
Échange : placer au bon endroit
Itération : pour chaque position
Complexité : O(n²) constante
Étapes du tri par sélection
Trouver le minimum dans le reste
Échanger avec la position actuelle
Répéter pour les positions restantes
Implémentation
Tri à bulles
Tri par sélection
Comparaison des algorithmes
Optimisations possibles
Code des algorithmes
# Tri à bulles
def tri_bulles(L):
n = len(L)
for i in range(n):
for j in range(0, n-i-1):
if L[j] > L[j+1]:
L[j], L[j+1] = L[j+1], L[j]
return L
# Tri par sélection
def tri_selection(L):
n = len(L)
for i in range(n):
min_idx = i
for j in range(i+1, n):
if L[j] < L[min_idx]:
min_idx = j
L[i], L[min_idx] = L[min_idx], L[i]
return L
Comparaison des tris
Tri à bulles : stable
Tri sélection : instable
Les deux : O(n²)
Erreurs fréquentes
Erreur 1 :
Bornes incorrectes dans les boucles
for j in range(n-i): # Trop loin!
for j in range(0, n-i-1): # Correct
for j in range(n-i): # Trop loin!
for j in range(0, n-i-1): # Correct
Erreur 2 :
Confusion entre échange et assignation
L[i] = L[j] # Assignation
L[i], L[j] = L[j], L[i] # Échange
L[i] = L[j] # Assignation
L[i], L[j] = L[j], L[i] # Échange
Erreur 3 :
Comparaison avec mauvais opérateur
if L[j] < L[j+1]: # Ordre décroissant
if L[j] > L[j+1]: # Ordre croissant
if L[j] < L[j+1]: # Ordre décroissant
if L[j] > L[j+1]: # Ordre croissant