Comment utiliser cette page

Cette page suit toujours le même plan : le principe en une phrase, les étapes dans l'ordre exact, une démonstration interactive, le code Python, puis le nombre de comparaisons et la complexité.

Utilisation de la démonstration
La démonstration avance uniquement quand vous cliquez sur « Suivant » ou « Précédent » : rien ne bouge tout seul. Un bouton « Lecture automatique » est disponible si vous préférez laisser les étapes défiler seules, à une vitesse que vous choisissez.

1. Vocabulaire à connaître avant de commencer

Chaque mot ci-dessous est utilisé exactement dans ce sens dans toute la page.

MotDéfinition précise
TableauUne liste de valeurs numérotées à partir de l'indice 0.
IndiceLe numéro qui repère une case du tableau. Le premier indice est 0, pas 1.
Comparer deux valeursRegarder laquelle des deux est la plus petite (pour un tri croissant).
Décaler une valeurUne valeur se déplace d'une case vers la droite, sans échange : l'ancienne valeur de cette case est recopiée plus loin.
Sous-tableau triéLa partie du tableau, à gauche, qui est déjà dans le bon ordre à cette étape.
ItérationUn passage dans la boucle principale. On note i le numéro de l'itération.
ComplexitéUne estimation du nombre d'opérations faites par l'algorithme, en fonction du nombre n de valeurs du tableau.

2. Le tableau d'exemple utilisé dans cette page

On utilise le tableau T, de 6 valeurs, pour la démonstration du tri par insertion :

Indice012345
Valeur T[i]538192

But de l'algorithme : transformer ce tableau, sur place, pour obtenir T = [1, 2, 3, 5, 8, 9], trié par ordre croissant.

3. Tri par insertion

3.1 — Principe, en une phrase

Principe
À chaque étape i, on prend la valeur à l'indice i et on la décale vers la gauche, case par case, jusqu'à ce qu'elle arrive à sa bonne place dans la partie déjà triée.

3.2 — Les étapes, dans l'ordre exact

  1. On part de l'indice i = 1 (la case d'indice 0, seule, est toujours considérée comme triée).
  2. On garde en mémoire la valeur à insérer : valeur = T[i].
  3. On compare valeur avec la case juste à sa gauche (indice j = i - 1). Si cette case contient une valeur plus grande que valeur, on la décale d'une case vers la droite.
  4. On continue à comparer et décaler vers la gauche, tant qu'il reste une case à gauche (j >= 0) et que la valeur de cette case est plus grande que valeur.
  5. Dès qu'on trouve une case dont la valeur est plus petite ou égale à valeur, ou qu'on arrive au début du tableau, on y place valeur.
  6. On passe à l'indice suivant : i = i + 1, et on répète les étapes 2 à 5 tant que i est inférieur à n.

3.3 — Démonstration interactive

partie déjà triée indice j en cours de comparaison emplacement actuel de « valeur »
Étape 1 / 1
La ligne de code correspondant à l'étape en cours est surlignée ci-dessous.

3.4 — Code Python

def tri_insertion(T):    """Trie le tableau T par ordre croissant (tri par insertion)."""    n = len(T)    for i in range(1, n):        valeur = T[i]        j = i - 1        while j >= 0 and T[j] > valeur:            T[j + 1] = T[j]            j = j - 1        T[j + 1] = valeur    return T# Jeu de données : le même exemple que la démonstration ci-dessusT = [5, 3, 8, 1, 9, 2]print(tri_insertion(T))# Résultat affiché : [1, 2, 3, 5, 8, 9]

3.5 — Nombre de comparaisons et complexité

4. Comparaison avec le tri par sélection

Pour la démonstration interactive du tri par sélection et son détail complet, voir la fiche sur le tri par sélection.

CritèreTri par sélectionTri par insertion
Idée principaleChercher le minimum, puis l'échangerDécaler les valeurs pour insérer à la bonne place
Nombre de comparaisonsToujours n(n-1)/2, quel que soit le tableau de départVariable : entre n-1 et n(n-1)/2 selon le tableau de départ
Meilleur cas (tableau déjà trié)O(n²) — pas plus rapideO(n) — beaucoup plus rapide
Pire casO(n²)O(n²)
Nombre d'échanges / décalagesAu maximum n - 1 échangesPeut aller jusqu'à n(n-1)/2 décalages
Quand le préférerQuand échanger deux valeurs coûte cher, peu importe l'ordre initialQuand le tableau est déjà presque trié
Vous venez de finir cette fiche ? → Fiche sur le tri par sélection