Implémentation d'algorithmes classiques/Algorithmes de tri/Tri par insertion
Sections |
Ada [modifier]
type FloatArray is array(Natural range<>) of Float; type Tab is access FloatArray; procedure tri_insertion(t : in out Tab) is j : Natural; elementInsere : Float; begin for i in t'Range loop elementInsere := t(i); j := i; while( j > t'First and then t(j - 1) > elementInsere ) loop t(j) := t(j - 1); j := j - 1; end loop; t(j) := elementInsere; end loop; end tri_insertion;
C [modifier]
Une mise en œuvre simple du tri par insertion sur un tableau de nombres flottants :
void tri_insertion(double* t, int n) { int i, j; double elementInsere; for (i = 1; i < n; i++) { /* Stockage de la valeur en i */ elementInsere = t[i]; /* Décale les éléments situés avant t[i] vers la droite jusqu'à trouver la position d'insertion */ for (j = i; j > 0 && t[j - 1] > elementInsere; j--) { t[j] = t[j - 1]; } /* Insertion de la valeur stockée à la place vacante */ t[j] = elementInsere; } }
Caml [modifier]
Tri par insertion en utilisant des vecteurs (en ordre décroissant).
let tri_ins t = let n = vect_length t and s=t in for k = 1 to (n - 1) do let x = t.(k) and j = ref( k - 1) in while ( !j >= 0 ) & ( x > s.(!j) ) do s.(!j + 1) <- t.(!j); j:= !j - 1; done; s.( !j + 1 ) <- x; done; s;;
Tri par insertion récursif en utilisant des listes.
let rec insere elem = function [] -> [elem] | tete::queue -> if elem <= tete then elem::tete::queue (* on a trouvé la place de l'élément *) else tete :: (insere elem queue) (* on continue à chercher dans la queue de la liste *) let rec tri_insertion = function [] -> [] | tete::queue -> insere tete (tri_insertion queue)
On remarque que les listes sont des structures de données plus simples à trier par insertion que les tableaux, parce qu'il n'y a pas besoin de "décaler les éléments".
Haskell [modifier]
Tri par insertion par ordre croissant en Haskell :
insTri :: Ord a => [a] -> [a] insTri [] = [] insTri (x:xs) = inserer x (insTri xs) where inserer x [] = [x] inserer x (y:ys) | (x<=y) = x:y:ys | otherwise = y:(inserer x ys)
Java [modifier]
Tri par insertion en ordre croissant en utilisant le langage Java (JDK avant la version 5.0)
public static void triParInsertion(int [] tab, int tailleLogique) { int cpt; int element; for (int i = 1; i < tailleLogique ; i++) { element = tab[i]; cpt = i - 1; while (cpt >= 0 && tab[cpt] > element) { tab[cpt + 1] = tab[cpt]; cpt--; } tab[cpt + 1] = element; } }
Javascript [modifier]
T est un tableau de nombres et n est un entier tel que l'on veuille trier T[0..n-1].
function executer_tri_par_insertion (T, n) { if (T.length < 2) return T; var i, j, element_a_inserer; for (i = 1; i < n; i++) { element_a_inserer = T[i]; j = i; while (j > 0 && element_a_inserer < T[j-1]) { T[j] = T[j-1]; j--; } T[j] = element_a_inserer; } return T; }
PHP [modifier]
Tri par insertion avec le langage PHP.
function Tri_insrt($liste, $taille ) { for($i = 0; $i < $taille; $i++) { $element_a_inserer = $liste[$i]; for($j = 0; $j < $i; $j++) { $element_courant = $liste[$j]; if ($element_a_inserer < $element_courant) { $liste[$j] = $element_a_inserer; $element_a_inserer = $element_courant; } } $liste[$i] = $element_a_inserer; } }
Pascal [modifier]
function position (t:tab ; i : integer ): integer ; var j : integer ; Begin j:=0 ; repeat j:=j+1 ; until t[j] >= t[i] ; position:=j ; End; procedure tri(var t : tab ; n:integer ); var int,i,j,p : integer ; Begin for i:=2 to n do begin p:=position(t,i); if p <> i then begin int:=t[i] ; for j :=i-1 downto p do begin t[j+1]:=t[j] ; end; t[p]:=int ; end; end; End;
Autre Méthode
procedure Tri_Insertion(n : integer; var t : tab); var i, j, k : integer; begin for i:=2 to n do begin k := t[i]; { Décale tous les éléments jusqu'à trouver le point d'insertion } j:=i - 1; while (j >= 1) and (t[j] > k) do begin t[j + 1] := t[j]; j := j - 1; end; t[j + 1] := k; end; end;
Python [modifier]
Tri par insertion avec le langage Python.
def insertionSort(array): for j in range(1, len(array)): i = j - 1 tmp = array[j] while i > -1 and array[i] > tmp: array[i+1] = array[i] i -= 1 array[i+1] = tmp
Tout ou partie de cette page est issue de l'article Wikipédia « Tri par insertion » dans sa version du 29/04/2010.