我试图编写一个程序,使用递归对C++(VS2010)中的数组元素进行选择排序。对于较小的数组,当我将数组的大小增加到10000时,该数组的大小小于10,程序可以正常工作,而我正面临stackoverflow异常。我该如何解决这个问题?
到目前为止,谢谢您的回答。我的想法不是对数组进行排序,而是使用递归对大型数组进行排序,并击中stackoverflow异常。本练习背后的主要思想是学习解决堆栈溢出异常的方法,而不是对数组进行排序。
selectionSortRecursive(int a[], int startindex, int endindex)
{
if (startindex<endindex)
{
int s = startindex;
for (int index=startindex+1;index<endindex;index++)
{
if (a[s]>a[index])
s=index;
}
if (s>startindex)
{
a[s]=a[startindex]+a[s];
a[startindex]=a[s]-a[startindex];
a[s]=a[s]-a[startindex];
}
selectionSortRecursive(a, startindex+1, endindex);
}
}
最佳答案
要么增加堆栈的大小(可以使用STACK
链接器选项完成),要么-这是一个更好的选择-改进或替换您的算法。听起来递归算法可能不适合您需要处理的数据类型,但也许您可以通过在每次方法调用中使用较少的局部变量和/或参数来改善性能,以使堆栈框架更小。
关于c++ - 在C++中解决StackOverFlowException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7655217/