Exemple #1
0
        /// <summary>
        /// Fonction récursive qui permet de trier la queue
        /// </summary>
        /// <param name="rejet"></param>
        /// <param name="garde"></param>
        /// <param name="nb"></param>
        /// <returns></returns>
        public Queue <Coureur> TriRecursif(Queue <Coureur> rejet, Queue <Coureur> garde, int nb)
        {
            Coureur coureurT = rejet.Peek();

            rejet.Dequeue();
            Queue <Coureur> temp = new Queue <Coureur>(rejet);

            rejet.Clear();
            do
            {
                foreach (Coureur entry in temp)
                {
                    if (coureurT.CompareTo(entry) == 1)
                    {
                        rejet.Enqueue(coureurT);
                        coureurT = entry;
                    }
                    else if (coureurT.CompareTo(entry) == -1)
                    {
                        rejet.Enqueue(entry);
                    }
                }
                garde.Enqueue(coureurT);
                if (rejet.Count > 0)
                {
                    garde = TriRecursif(rejet, garde, nb);
                }
            } while (garde.Count < (nb - 1));
            return(garde);
        }
Exemple #2
0
        /// <summary>
        /// Permet de trier la pile de façon récursif
        /// </summary>
        /// <param name="rejet">Le stack des objets non triés</param>
        /// <param name="garde">Le stack déjà trié</param>
        /// <param name="nb">La taille du stack contenant tous les objets</param>
        /// <returns>Le stack trié</returns>
        public Stack <Coureur> TriRecursif(Stack <Coureur> rejet, Stack <Coureur> garde, int nb)
        {
            Coureur coureurT = rejet.Peek();

            rejet.Pop();
            Stack <Coureur> temp = new Stack <Coureur>(rejet);

            rejet.Clear();
            do
            {
                foreach (Coureur entry in temp)
                {
                    if (coureurT.CompareTo(entry) == -1)
                    {
                        rejet.Push(coureurT);
                        coureurT = entry;
                    }
                    else
                    if (coureurT.CompareTo(entry) == 1)
                    {
                        rejet.Push(entry);
                    }
                }
                garde.Push(coureurT);
                if (rejet.Count > 0)
                {
                    garde = TriRecursif(rejet, garde, nb);
                }
            } while (garde.Count < (nb - 1));
            return(garde);
        }