1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
static void Main( string[] args )
{
Queue<int> valeurs = new Queue<int>();
valeurs.Enqueue( 1 );
valeurs.Enqueue( 5 );
valeurs.Enqueue( 50 );
valeurs.Enqueue( 42 );
valeurs.Enqueue( 95 );
valeurs.Enqueue( 10 );
List<int> resultat = new List<int>();
Tri( valeurs, valeurs.Peek(), resultat );
}
static void Tri( Queue<int> valeurs, int valeurPivot, List<int> resultat )
{
if ( valeurs.Count == 1 )
{
resultat.Add( valeurs.Dequeue() );
}
else
{
Queue<int> droite = new Queue<int>();
Queue<int> gauche = new Queue<int>();
while ( valeurs.Count != 0 )
{
int valeur = valeurs.Dequeue();
if ( valeur <= valeurPivot )
droite.Enqueue( valeur );
else
gauche.Enqueue( valeur );
}
if ( droite.Count == 0 )
{
int v1 = gauche.Dequeue();
int v2 = gauche.Dequeue();
gauche.Enqueue( v2 );
gauche.Enqueue( v1 );
Tri( gauche, gauche.Peek(), resultat );
}
else if ( gauche.Count == 0 )
{
int v1 = droite.Dequeue();
int v2 = droite.Dequeue();
droite.Enqueue( v2 );
droite.Enqueue( v1 );
Tri( droite, droite.Peek(), resultat );
}
else
{
Tri( droite, droite.Peek(), resultat );
Tri( gauche, gauche.Peek(), resultat );
}
}
} |
Partager