J'ai donc essayé d'implémenter moi-même un quicksort, juste pour en apprendre quelque chose, mais il génère aussi une exception stackoverflow, mais je n'arrive pas à trouver la cause.Un autre stackoverflow Quicksort
Quelqu'un peut-il me donner un indice?
public void Partition(List<int> valuelist, out List<int> greater, out List<int> lesser)
{
lesser = new List<int>(); // <-- Stackoverflow exception here!
greater = new List<int>();
if (valuelist.Count <= 1)
return;
pivot = valuelist.First();
foreach (int Element in valuelist)
{
if (Element <= pivot)
lesser.Add(Element);
else
greater.Add(Element);
}
}
public List<int> DoQuickSort(List<int> list)
{
List<int> great;
List<int> less;
Partition(list, out great, out less);
DoQuickSort(great);
DoQuickSort(less);
list.Clear();
list = (List<int>)less.Concat(great);
return list;
}
est-ce pas mieux pour trouver simplement en en lui donnant quelques petites données à trier, et étape avec le débogueur à travers lui pour voir où la logique est incorrecte? – Toad
Je ne pense pas qu'un algorithme de tri qui repose sur la création de beaucoup de collections et la copie de beaucoup de valeurs peut être appelé "rapide". Vous devriez le renommer "slogsort intensive en mémoire garanti pour être aussi lent que possible." – Will
@reinier: S'appuyer sur le débogueur pour trouver vos erreurs de logique est assez paresseux. Parfois, c'est inévitable, mais il est préférable de pouvoir trouver les erreurs sans l'aide d'un débogueur. –