Tri par insertion

Harshit Jindal 12 octobre 2023
  1. Algorithme de tri par insertion
  2. Exemple de tri par insertion
  3. Implémentation de l’algorithme de tri par insertion
  4. Complexité de l’algorithme de tri par insertion
Tri par insertion

Le tri par insertion est un algorithme de tri simple basé sur la comparaison. Dans cet algorithme, nous maintenons deux sous-réseaux : un sous-réseau trié et un sous-réseau non trié. Un élément du sous-réseau non trié trouve sa position correcte dans le sous-réseau trié et y est inséré. Cette méthode est analogue à celle utilisée lorsque quelqu’un trie un jeu de cartes dans sa main. Elle est appelée tri d’insertion car elle fonctionne en insérant un élément à sa position correcte. Cet algorithme est efficace pour les petits ensembles de données mais ne convient pas aux grands ensembles de données.

Algorithme de tri par insertion

Supposons que nous ayons un tableau non trié A[] contenant n éléments. Le premier élément, A[0], est déjà trié et se trouve dans le sous-tableau trié.

  • Nous marquons le premier élément du sous-tableau non trié A[1] comme étant la clé.
  • La clé est ensuite comparée aux éléments du sous-tableau trié ; ici, nous n’avons qu’un seul élément, A[0].
  • Si la clé est supérieure à A[0], nous l’insérons après A[0].
  • Sinon, si elle est plus petite, nous comparons à nouveau pour l’insérer à la bonne position avant A[0]. (Dans le cas de A[0], il n’y a qu’une seule position)
  • Prenez l’élément suivant A[2] comme clé. Comparez-le avec les éléments de sous-réseaux triés et insérez-le après l’élément juste plus petit que A[2]. S’il n’y a pas de petits éléments, insérez-le au début du sous-tableau trié.
  • Répétez les étapes ci-dessus pour tous les éléments du sous-tableau non trié.

Exemple de tri par insertion

Supposons que nous ayons le tableau : (5,3,4,2,1). Nous allons le trier en utilisant l’algorithme de tri par insertion.

Sous-tableau trié Sous-réseau non trié Array
( 5 ) ( 3, 4, 2, 1) (5, 3, 4, 2, 1)
  • Premier tour

Clé : A[1] = 3

Sous-réseau trié Sous-réseau non trié Array
( 3 , 5) (4, 2, 1) (3, 5, 4, 2, 1)
  • Deuxième tour

Clé : A[2] = 4

Sous-réseau trié Sous-réseau non trié Array
( 3, 4, 5) (2, 1) (3, 4, 5, 2, 1)
  • Troisième tour

Clé : A[3] = 2

Sous-réseau trié Sous-réseau non trié Array
( 2, 3, 4, 5) (1) (2, 3, 4, 5, 1)
  • Quatrième tour

Clé : A[4] = 1

Sous-réseau trié Sous-réseau non trié Array
( 1, 2, 3, 4, 5) () (1, 2, 3, 4, 5)

Implémentation de l’algorithme de tri par insertion

#include <iostream>
using namespace std;

void insertion_sort(int arr[], int n) {
  for (int i = 1; i < n; i++) {
    int j = i;
    while (j > 0 && arr[j - 1] > arr[j]) {
      int key = arr[j];
      arr[j] = arr[j - 1];
      arr[j - 1] = key;
      j--;
    }
  }
}

int main() {
  int n = 5;
  int arr[5] = {5, 3, 4, 2, 1};
  cout << "Input array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
  insertion_sort(arr, n);  // Sort elements in ascending order
  cout << "Output array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
}

Complexité de l’algorithme de tri par insertion

Complexité temporelle

  • Cas moyen

En moyenne, les comparaisons i sont effectuées dans la passe i du tri par insertion. Donc, s’il y a n itérations, alors la complexité temporelle moyenne peut être donnée ci-dessous.

1 + 2 + 3 + ... + (n-1) = n*(n-1)/2

La complexité temporelle est donc de l’ordre du [Big Theta] : O(n2).

  • Pire cas

Le cas le plus défavorable se produit lorsque le tableau est trié à l’envers, et que le nombre maximum de comparaisons et d’échanges doit être effectué.

Le pire cas de complexité temporelle est le [Big O] : O(n2).

  • Meilleur cas

Dans le meilleur des cas, le tableau est déjà trié, et seule la boucle extérieure est exécutée n fois.

La complexité temporelle dans le meilleur des cas est [Big Omega] : O(n).

Complexité spatiale

La complexité spatiale de l’algorithme de tri par insertion est O(n) car aucune mémoire supplémentaire autre qu’une variable temporaire n’est nécessaire.

Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

Article connexe - Sort Algorithm