Так что я сам пытался реализовать quicksort, просто чтобы узнать что-то из него, но также генерирует исключение stackoverflowexception, но я не могу найти причину.Еще один Quicksort stackoverflow
Может ли кто-нибудь дать мне ключ?
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;
}
не это лучше всего, чтобы найти, просто давая ему некоторые небольшие данные для сортировки и шагая с отладчиком через него, чтобы увидеть, где логика неверна? – Toad
Я не думаю, что любой алгоритм сортировки, основанный на создании множества коллекций и копировании множества значений, можно назвать «быстрым». Вы должны переименовать его, чтобы «медленная память» была гарантирована как можно медленнее ». – Will
@reinier: Опираясь на отладчик, чтобы найти логические ошибки, довольно ленив. Иногда это неизбежно, но гораздо лучше найти ошибки без помощи отладчика. –