logo

Algorithme de tri par insertion

Dans cet article, nous aborderons l’algorithme de tri par insertion. La procédure de travail du tri par insertion est également simple. Cet article sera très utile et intéressant pour les étudiants car ils pourraient être confrontés au tri par insertion comme question lors de leurs examens. Il est donc important d’aborder le sujet.

Le tri par insertion fonctionne de la même manière que le tri des cartes à jouer en main. On suppose que la première carte est déjà triée dans le jeu de cartes, puis nous sélectionnons une carte non triée. Si la carte non triée sélectionnée est plus grande que la première carte, elle sera placée à droite ; sinon, il sera placé sur le côté gauche. De même, toutes les cartes non triées sont récupérées et remises à leur place exacte.

La même approche est appliquée au tri par insertion. L'idée derrière le tri par insertion est de prendre d'abord un élément, de le parcourir dans le tableau trié. Bien qu'il soit simple à utiliser, il n'est pas approprié pour les grands ensembles de données car la complexité temporelle du tri par insertion dans le cas moyen et dans le pire des cas est Sur2) , où n est le nombre d'éléments. Le tri par insertion est moins efficace que les autres algorithmes de tri comme le tri par tas, le tri rapide, le tri par fusion, etc.

Le tri par insertion présente divers avantages tels que -

  • Mise en œuvre simple
  • Efficace pour les petits ensembles de données
  • Adaptatif, c'est-à-dire qu'il convient aux ensembles de données déjà substantiellement triés.

Voyons maintenant l'algorithme de tri par insertion.

Algorithme

Les étapes simples pour réaliser le tri par insertion sont répertoriées comme suit :

Étape 1 - Si l'élément est le premier élément, supposez qu'il est déjà trié. Retour 1.

ascii d'un en java

Étape 2 - Choisissez l'élément suivant et stockez-le séparément dans un clé.

Étape 3 - Maintenant, comparez le clé avec tous les éléments du tableau trié.

Étape 4 - Si l'élément du tableau trié est plus petit que l'élément actuel, passez à l'élément suivant. Sinon, déplacez les éléments les plus grands du tableau vers la droite.

Étape 5 - Insérez la valeur.

Étape 6 - Répétez jusqu'à ce que le tableau soit trié.

Fonctionnement de l'algorithme de tri par insertion

Voyons maintenant le fonctionnement de l'algorithme de tri par insertion.

Pour comprendre le fonctionnement de l'algorithme de tri par insertion, prenons un tableau non trié. Il sera plus facile de comprendre le tri par insertion via un exemple.

Soit les éléments du tableau -

Algorithme de tri par insertion

Initialement, les deux premiers éléments sont comparés dans le tri par insertion.

Algorithme de tri par insertion

Ici, 31 est supérieur à 12. Cela signifie que les deux éléments sont déjà dans l’ordre croissant. Donc, pour l’instant, 12 est stocké dans un sous-tableau trié.

Algorithme de tri par insertion

Passons maintenant aux deux éléments suivants et comparez-les.

Algorithme de tri par insertion

Ici, 25 est plus petit que 31. Donc, 31 n’est pas à la bonne position. Maintenant, échangez 31 avec 25. Parallèlement à l'échange, le tri par insertion le vérifiera également avec tous les éléments du tableau trié.

Pour l'instant, le tableau trié ne comporte qu'un seul élément, soit 12. Ainsi, 25 est supérieur à 12. Par conséquent, le tableau trié reste trié après l'échange.

Algorithme de tri par insertion

Maintenant, deux éléments du tableau trié sont 12 et 25. Passez aux éléments suivants qui sont 31 et 8.

Algorithme de tri par insertion

Les 31 et 8 ne sont pas triés. Alors, échangez-les.

Algorithme de tri par insertion

Après échange, les éléments 25 et 8 ne sont pas triés.

Algorithme de tri par insertion

Alors, échangez-les.

Algorithme de tri par insertion

Désormais, les éléments 12 et 8 ne sont pas triés.

Algorithme de tri par insertion

Alors, échangez-les aussi.

Algorithme de tri par insertion

Maintenant, le tableau trié contient trois éléments 8, 12 et 25. Passez aux éléments suivants 31 et 32.

Algorithme de tri par insertion

Ils sont donc déjà triés. Désormais, le tableau trié comprend 8, 12, 25 et 31.

Algorithme de tri par insertion

Passez aux éléments suivants qui sont 32 et 17.

Algorithme de tri par insertion

17 est plus petit que 32. Alors, échangez-les.

Algorithme de tri par insertion

L'échange rend 31 et 17 non triés. Alors, échangez-les aussi.

Algorithme de tri par insertion

Désormais, l'échange rend 25 et 17 non triés. Alors, effectuez à nouveau l’échange.

Algorithme de tri par insertion

Maintenant, le tableau est complètement trié.

Complexité du tri par insertion

Voyons maintenant la complexité temporelle du tri par insertion dans le meilleur des cas, le cas moyen et le pire des cas. Nous verrons également la complexité spatiale du tri par insertion.

1. Complexité temporelle

Cas Complexité temporelle
Meilleur cas Sur)
Cas moyen Sur2)
Pire cas Sur2)
    Complexité du meilleur cas -Cela se produit lorsqu'aucun tri n'est requis, c'est-à-dire que le tableau est déjà trié. La complexité temporelle dans le meilleur des cas du tri par insertion est Sur) .Complexité moyenne des cas -Cela se produit lorsque les éléments du tableau sont dans un ordre confus qui n'est pas correctement ascendant ni correctement descendant. La complexité moyenne du temps de traitement du tri par insertion est Sur2) .Pire complexité des cas -Cela se produit lorsque les éléments du tableau doivent être triés dans l’ordre inverse. Cela signifie que vous devez trier les éléments du tableau par ordre croissant, mais que ses éléments sont par ordre décroissant. La complexité temporelle du tri par insertion dans le pire des cas est Sur2) .

2. Complexité spatiale

Complexité spatiale O(1)
Écurie OUI
  • La complexité spatiale du tri par insertion est O(1). En effet, lors du tri par insertion, une variable supplémentaire est requise pour l'échange.

Implémentation du tri par insertion

Voyons maintenant les programmes de tri par insertion dans différents langages de programmation.

Programme: Écrivez un programme pour implémenter le tri par insertion en langage C.

 #include void insert(int a[], int n) /* function to sort an aay with insertion sort */ { int i, j, temp; for (i = 1; i <n; i++) { temp="a[i];" j="i" - 1; while(j>=0 &amp;&amp; temp <= 17 a[j]) * move the elements greater than temp to one position ahead from their current position* { a[j+1]="a[j];" j="j-1;" } void printarr(int a[], int n) function print array i; for (i="0;" i < n; i++) printf('%d ', a[i]); main() a[]="{" 12, 31, 25, 8, 32, }; n="sizeof(a)" sizeof(a[0]); printf('before sorting are - 
'); printarr(a, n); insert(a, printf('
after return 0; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-18.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in python.</p> <pre> def insertionSort(a): # Function to implement insertion sort for i in range(1, len(a)): temp = a[i] # Move the elements greater than temp to one position #ahead from their current position j = i-1 while j &gt;= 0 and temp <a[j] : a[j + 1]="a[j]" j="j-1" def printarr(a): # function to print the array for i in range(len(a)): (a[i], end=" " ) a="[70," 15, 2, 51, 60] print('before sorting elements are - ') printarr(a) insertionsort(a) print('
after < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-19.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in C++ language.</p> <pre> #include using namespace std; void insert(int a[], int n) /* function to sort an aay with insertion sort */ { int i, j, temp; for (i = 1; i <n; i++) { temp="a[i];" j="i" - 1; while(j>=0 &amp;&amp; temp <= 2 a[j]) * move the elements greater than temp to one position ahead from their current position* { a[j+1]="a[j];" j="j-1;" } void printarr(int a[], int n) function print array i; for (i="0;" i < n; i++) cout << a[i] <<' '; main() a[]="{" 89, 45, 35, 8, 12, }; n="sizeof(a)" sizeof(a[0]); cout<<'before sorting are - '<<endl; printarr(a, n); insert(a, cout<<'
after return 0; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-20.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in C# language.</p> <pre> using System; class Insertion { static void insert(int[] a) /* function to sort an aay with insertion sort */ { int i, j, temp; int n = a.Length; for (i = 1; i <n; i++) { temp="a[i];" j="i" - 1; while(j>=0 &amp;&amp; temp <= 12 a[j]) * move the elements greater than temp to one position ahead from their current position* { a[j+1]="a[j];" j="j-1;" } static void printarr(int[] a) function print array int i; n="a.Length;" for (i="0;" i < n; i++) console.write(a[i] + ' '); main() int[] a="{" 98, 54, 53, 18, 21, }; console.write('before sorting are - 
'); printarr(a); insert(a); console.write('
after pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-21.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in Java.</p> <pre> public class Insert { void insert(int a[]) /* function to sort an aay with insertion sort */ { int i, j, temp; int n = a.length; for (i = 1; i <n; i++) { temp="a[i];" j="i" - 1; while(j>=0 &amp;&amp; temp <= 22 a[j]) * move the elements greater than temp to one position ahead from their current position* { a[j+1]="a[j];" j="j-1;" } void printarr(int a[]) function print array int i; n="a.length;" for (i="0;" i < n; i++) system.out.print(a[i] + ' '); public static main(string[] args) a[]="{" 92, 50, 5, 20, 11, }; insert i1="new" insert(); system.out.println('
before sorting are - i1.printarr(a); i1.insert(a); system.out.println('

after system.out.println(); pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-22.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in PHP.</p> <pre> <?php $a = array( 92, 50, 5, 20, 11, 22 ); function printArray($a) { for($i = 0; $i < 6; $i++) { print_r($a[$i]); echo ' '; } } echo 'Before sorting array elements are - <br>&apos;; printArray($a); for ($i = 1; $i = 0 &amp;&amp; $temp <= $a[$j]) * move the elements greater than temp to one position ahead from their current position* { $a[$j+1]="$a[$j];" $j="$j-1;" } echo ' <br> After sorting array elements are - <br>&apos;; printArray($a); ?&gt; </=></pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-23.webp" alt="Insertion Sort Algorithm"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <p>This article was not only limited to the algorithm. We have also discussed the algorithm&apos;s complexity, working, and implementation in different programming languages.</p> <hr></=></n;></pre></=></n;></pre></=></n;></pre></a[j]></pre></=></n;>

Sortir:

Algorithme de tri par insertion

Donc, c'est tout à propos de l'article. J'espère que l'article vous sera utile et informatif.

Cet article ne se limitait pas à l’algorithme. Nous avons également discuté de la complexité, du fonctionnement et de la mise en œuvre de l'algorithme dans différents langages de programmation.