我编写了一个递归插入排序,但工作正常,但问题是如果我设置n = 10000或大约5000或更大,应用程序停止工作,无论数组的值是什么。 (例如矢量数组(10000,0))
以下是代码:
void RecursiveInsertionSort(int i, vector<int> &arr)
{
if (i <= 0)
return;
RecursiveInsertionSort(i - 1, arr);
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
我在 main 中称之为:
vector<int> arr (10000,1);
RecursiveInsertionSort(arr.size() - 1, sorted);
我不明白问题所在。
答案 0 :(得分:3)
我认为您的问题与您环境中允许的最大递归级别有关。可以找到更多详细信息here和here。
<强> [编辑] 强>
如果不控制最大递归级别(例如输入可能非常大的情况),最好避免递归并使用迭代算法(即使用while
,for
等等。)。 here解释了这个问题,this article非常清楚地介绍了如何将递归算法实际转换为非递归算法。