/// <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); }
/// <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); }