Une classe C# solution du problème :Le sous programme C# implantant l'algorithme de tri par insertion sur le tableau 'table' :
static void TriInsert ( ) {
// sous-programme de Tri par insertion
int n = table.Length-1;
for ( int i = 2; i <= n; i++)
{ // la partie non encore triée (ai, ai+1, ... , an)
int v = table[i]; // l'élément frontière : ai
int j = i; // le rang de l'élément frontière
while (table[ j-1 ] > v)
{ //on travaille sur la partie déjà triée (a1, a2, ... , ai)
table[ j ] = table[ j-1 ]; // on décale l'élément
j = j-1; // on passe au rang précédent
}
table[ j ] = v ; //on recopie ai dans la place libérée
}
}
Une classe complète permettant l'exécution du sous-programme précédent :
using System;
namespace CsExosAlgo1
{
class ApplicationTriInsert {
static int[] table ; // le tableau à trier, par exemple 19 éléments
/* Tri avec sentinelle :
* dans la cellule de rang 0 se trouve une sentinelle (Int32.MinValue)
* chargée d'éviter de tester dans la boucle tantque .. faire
* si l'indice j n'est pas inférieur à 1, elle aura une valeur
* inférieure à toute valeur possible de la liste.
*/
static void AfficherTable ( ) {
// Affichage du tableau
int n = table.Length-1;
for ( int i = 1; i <= n; i++)
System.Console.Write (table[i]+" , ");
System.Console.WriteLine ( );
}static void InitTable ( )
{ // sentinelle dans la cellule de rang zéro
int[ ] tableau = { Int32.MinValue ,25, 7 , 14 , 26 , 25 , 53 , 74 , 99 , 24 , 98 ,
89 , 35 , 59 , 38 , 56 , 58 , 36 , 91 , 52 };
table = tableau;
}static void Main(string[ ] args) {
InitTable ( );
System.Console.WriteLine ("Tableau initial :");
AfficherTable ( );
TriInsert ( );
System.Console.WriteLine ("Tableau une fois trié :");
AfficherTable ( );
System.Console.Read();
}}
static void TriInsert ( ) {
// sous-programme de Tri par insertion : on trie les éléments du n°1 au n°19
int n = table.length-1;
for ( int i = 2; i <= n; i++)
{ // la partie non encore triée (ai, ai+1, ... , an)
int v = table[i]; // l'élément frontière : ai
int j = i; // le rang de l'élément frontière
while (table[ j-1 ] > v)
{ //on travaille sur la partie déjà triée (a1, a2, ... , ai)
table[ j ] = table[ j-1 ]; // on décale l'élément
j = j-1; // on passe au rang précédent
}
table[ j ] = v ; //on recopie ai dans la place libérée
}
}
}
Source recopiable (cliquez sur le lien)
Tableau initial :
25 , 7 , 14 , 26 , 25 , 53 , 74 , 99 , 24 , 98 , 89 , 35 , 59 , 38 , 56 , 58 , 36 , 91 , 52Tableau une fois trié :
7 , 14 , 24 , 25 , 25 , 26 , 35 , 36 , 38 , 52 , 53 , 56 , 58 , 59 , 74 , 89 , 91 , 98 , 99