递归插入排序崩溃几乎大n

时间:2016-02-26 13:51:57

标签: c++ crash insertion-sort

我编写了一个递归插入排序,但工作正常,但问题是如果我设置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);

我不明白问题所在。

1 个答案:

答案 0 :(得分:3)

我认为您的问题与您环境中允许的最大递归级别有关。可以找到更多详细信息herehere

<强> [编辑]

如果不控制最大递归级别(例如输入可能非常大的情况),最好避免递归并使用迭代算法(即使用whilefor等等。)。 here解释了这个问题,this article非常清楚地介绍了如何将递归算法实际转换为非递归算法。