Accueil de Gladir.com Notes légales de Gladir.com Flux RSS des nouvelles du site Gladir.com - Langage de programmation - C# (C Sharp) - Tri Shell Sort/Shell-Metzner Section du logiciel DOS «MonsterBook» Inventaire de la bibliothèque de Gladir.com Entrée administrateur

La technique de tri nommée «Shell-Metzner», est en fait une technique de réduction du nombre de comparaison a effectuer pour trier un tableau. Comment si prend-on? C'est simple, la comparaison s'effectue entre 2 éléments séparé par un écart égal (au départ) à la moitié de la taille du tableau. Ensuite, la comparaison s'effectue entre des éléments séparées par un écart égal au nombre d'élément du tableau divisée par 4. Lorsque l'écart atteint finalement 1, la tri est terminé. Vous trouverez la réponse que vous souhaitez, à l'aide du code source C# (C Sharp) suivant :

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace TriShell
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             const int MaxTableau = 8 ;
  13.             int K,L,I,J,Inversion,ecart,Temporaire;
  14.             int[] Tableau = {15, 10, 23, 2, 8, 9, 14, 16};
  15.             Console.Write("Avant:");
  16.             for(K = 0; K < MaxTableau; K++) Console.Write(Tableau[K] + ", ");
  17.             Inversion = 0;
  18.             ecart = MaxTableau;
  19.             do {
  20.                 ecart >>= 1;
  21.                 do {
  22.                     Inversion = 0;
  23.                     for(I = 0; I <= MaxTableau - ecart - 1; I++) {
  24.                         J = I + ecart;
  25.                         if(Tableau[J] < Tableau[I]) {
  26.                             Temporaire = Tableau[I];
  27.                             Tableau[I] = Tableau[J];
  28.                             Tableau[J] = Temporaire;
  29.                             Inversion = 1;
  30.                         }
  31.                     }
  32.                 } while (1 == Inversion);
  33.             } while (1 != ecart);
  34.             Console.WriteLine();
  35.             Console.Write("Après:");
  36.             for(L = 0; L < MaxTableau; L++) {
  37.                 Console.Write(", " + Tableau[L]);
  38.             }
  39.             Console.WriteLine(); 
  40.         }
  41.     }
  42. }
  43.  

on obtiendra le résultat suivant :

Avant:15, 10, 23, 2, 8, 9, 14, 16,
Après:2, 8, 9, 10, 14, 15, 16, 23,

Voir également

Algorithme - Tri


Dernière mise à jour: Vendredi, le 25 mai 2012