Python (école d'ingénieur) · Chapitre 6 · Exercice
Analyse du tri par insertion
Complexité algorithmique
Énoncé
L'algorithme de tri par insertion est implémenté ci-dessous :
def tri_insertion(L):
for i in range(1, len(L)):
cle = L[i]
j = i - 1
while j >= 0 and L[j] > cle:
L[j+1] = L[j]
j -= 1
L[j+1] = cle
return L
Déterminer la complexité temporelle dans le meilleur des cas, le pire des cas, et en moyenne.
Corrigé
Soit .
- Meilleur des cas : La liste est déjà triée par ordre croissant. La condition du test
L[j] > cleest systématiquement fausse. La boucle internewhilene s'exécute jamais. La boucle externe fait passages en effectuant un nombre constant d'opérations à chaque étape. La complexité est linéaire : .
- Pire des cas : La liste est initialement triée dans l'ordre inverse (décroissant). À chaque étape , la variable
cleest comparée à tous les éléments précédents qui lui sont supérieurs. La boucle interne s'exécute exactement fois. Le nombre total d'itérations internes vaut : La complexité est quadratique : .
- Cas moyen : Pour une permutation aléatoire, chaque élément est inséré à mi-chemin en moyenne, ce qui fait itérations de la boucle interne. De plus, le nombre de déplacements correspond au nombre moyen d'inversions de la liste, qui vaut . La complexité en moyenne reste quadratique : .
100 % gratuit
La suite du chapitre est sur Adloun
- 7 autres exercices corrigés dans ce chapitre, et 7 à chercher avec le tuteur
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.