Adloun

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] > cle est systématiquement fausse. La boucle interne while ne 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 cle est 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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →