gpt4 book ai didi

c# - 另一个快速排序计算器

转载 作者:行者123 更新时间:2023-11-30 19:50:36 26 4
gpt4 key购买 nike

所以我一直在尝试自己实现一个快速排序,只是想从中学习一些东西,但是它也产生了一个stackoverflowexception,但我似乎找不到原因是什么。

谁能给我一个线索?

  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;

}

最佳答案

你正在做一个无限循环

  DoQuickSort(great);

你需要一种方法来使用标志或条件跳出该循环

编辑
我会补充一点,在 Debug模式下,默认设置下,在抛出异常之前只能达到 10,000 到 16,000 次递归调用,而在 Release模式下,只能达到 50,000 到 80,000 次,这取决于实际执行的代码。

如果您使用大量值,您可能需要使用 Stack 来管理自己的递归调用。对象。

查看崩溃前调用了多少次的示例代码;
(调试;14210调用,释放80071调用)

   static int s = 1;
static void Main(string[] args)
{
o();
}

static void o()
{
s++;
Console.WriteLine(s.ToString());
o();
}

关于c# - 另一个快速排序计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2093588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com