所以我一直試圖自己實現一個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