所以我一直试图自己实现一个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 2010-01-19 13:10:00
我不认为任何依靠创建大量集合和复制大量值的排序算法都可以称为“快速”。你应该重新命名它“保证尽可能缓慢的内存密集型日志。” – Will 2010-01-19 13:12:06
@reinier:依靠调试器来发现你的逻辑错误是非常懒惰的。有时候这是不可避免的,但是如果没有调试器的帮助,能够找到错误要好得多。 – 2010-01-19 13:16:33