Menu
Coddy logo textTech

Tri par Insertion

Dernière mise à jour

Le tri par insertion construit le tableau trié un élément à la fois. Il prend le prochain élément non trié (la « clé ») et décale d'une case vers la droite chaque élément plus grand de la région triée, puis place la clé dans l'espace libéré. C'est exactement ainsi que la plupart des gens trient une main de cartes à jouer. Appuyez sur lecture ci-dessus pour voir chaque clé s'insérer, ou parcourez les décalages un par un.

Le tri par insertion est très rapide sur des entrées petites ou presque triées - il s'exécute en O(n) lorsque les données sont déjà triées - c'est pourquoi de nombreux tris hybrides s'y replient pour les petits sous-tableaux.

Complexité en temps et en espace

CasComplexitéNotes
Meilleur casO(n)Déjà trié
Cas moyenO(n²)Ordre aléatoire
Pire casO(n²)Ordre inverse
EspaceO(1)En place
StableOuiLes éléments égaux conservent leur ordre relatif

Étape par étape

ÉtapeCe qui se passe
1Traiter le premier élément comme une région triée de taille un.
2Prendre l'élément suivant comme clé.
3Décaler d'une case vers la droite chaque élément trié plus grand que la clé.
4Insérer la clé dans l'espace ouvert.
5Répéter jusqu'à ce que tous les éléments aient été insérés.

Exemple résolu

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

PasseTableauAction
Début[5, 2, 4, 1]5 est la région triée initiale de taille un.
1[2, 5, 4, 1]Clé 2 : décaler 5 vers la droite, insérer 2 au début.
2[2, 4, 5, 1]Clé 4 : décaler 5 vers la droite, 2 est plus petit donc arrêt, insérer 4.
3[1, 2, 4, 5]Clé 1 : décaler 5, 4, 2 vers la droite, insérer 1 au début.
Fin[1, 2, 4, 5]Tous les éléments insérés ; le tableau est trié.

Quand utiliser le tri par insertion

À utiliser quandÀ éviter quand
Le tableau est petit (environ n < 20).Le tableau est grand et ordonné aléatoirement.
Les données sont déjà presque triées, donnant le meilleur cas O(n).Vous avez besoin d'un pire cas garanti en O(n log n).
Vous avez besoin d'un tri stable, en place, avec un espace supplémentaire O(1).Déplacer les éléments coûte cher, car il effectue de nombreux décalages.
Les données arrivent progressivement et doivent rester triées en ligne.L'entrée est triée à l'envers, son pire cas O(n²).

Code de Insertion Sort

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

Code de Insertion Sort en Python

Python
1def insertion_sort(a):2    for i in range(1, len(a)):3        key = a[i]4        j = i - 15        # Shift larger elements one slot to the right6        while j >= 0 and a[j] > key:7            a[j + 1] = a[j]8            j -= 19        a[j + 1] = key10    return a11
12
13nums = [7, 3, 9, 1, 5, 8, 2]14print("Before:", nums)15insertion_sort(nums)16print("After: ", nums)
Exécutez ce code dans le Playground Python

FAQ sur le tri par insertion

Quelle est la complexité temporelle du tri par insertion ?
Le tri par insertion est en O(n²) en moyenne et dans le pire cas, mais en O(n) sur un tableau déjà trié ou presque trié. Il utilise un espace supplémentaire O(1).
Le tri par insertion est-il stable ?
Oui. Le tri par insertion ne décale que les éléments strictement supérieurs à la clé, de sorte que les éléments égaux ne se croisent jamais et que leur ordre relatif est préservé.
Quand devrais-je utiliser le tri par insertion ?
Utilisez-le pour de petits tableaux ou des données déjà presque triées. En raison de son faible coût et de son meilleur cas adaptatif, des algorithmes hybrides comme Timsort l'utilisent pour de petites plages.
Quelle est la différence entre le tri par insertion et le tri à bulles ?
Les deux sont des tris par comparaison en O(n²), mais le tri par insertion décale les éléments pour ouvrir un espace pour la clé, tandis que le tri à bulles échange à répétition des paires adjacentes mal ordonnées. Le tri par insertion effectue généralement moins d'écritures et se comporte mieux en pratique, surtout sur des données presque triées où il atteint son meilleur cas O(n).
Pourquoi le tri par insertion est-il plus rapide que le tri fusion sur de petits tableaux ?
Le tri par insertion a un coût constant très faible et n'utilise ni récursion ni allocation supplémentaire, donc sur de petites entrées il bat les tris en O(n log n) malgré sa pire complexité asymptotique. C'est précisément pourquoi les tris hybrides comme Timsort et introsort basculent vers le tri par insertion pour les petits sous-tableaux.
Le tri par insertion fonctionne-t-il mieux avec une liste chaînée ou un tableau ?
Le tri par insertion est normalement écrit pour les tableaux, où le décalage des éléments est le coût principal. Sur une liste chaînée, vous évitez le décalage en insérant le nœud à sa place, mais vous perdez l'accès aléatoire rapide, donc trouver le point d'insertion prend toujours un temps linéaire par élément et le coût total reste O(n²).
Coddy programming languages illustration

Maîtrisez les algorithmes avec Coddy

COMMENCER