c++ - 几乎大 n 的递归插入排序崩溃

标签 c++ crash insertion-sort

我写了一个工作正常的递归插入排序,但问题是如果我设置 n = 10000 或大约 5000 或更大,无论数组的值是什么,应用程序都会停止工作。 (例如 vector 数组(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;

}

我在 ma​​in 中这样调用它:

vector<int> arr (10000,1);
RecursiveInsertionSort(arr.size() - 1, sorted);

我不明白问题出在哪里。

最佳答案

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

[编辑]

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

关于c++ - 几乎大 n 的递归插入排序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35653488/

相关文章:

c++ QT QUdp 套接字不发送/接收数据?

ios - 如何修复无法重现的应用程序崩溃?附上崩溃报告和控制台日志

c++ - 终止应用程序并调用局部对象的析构函数

java - 具有多个调用者方法的堆栈跟踪

javascript - Javascript:由用户输入分配变量时崩溃

java - 如何仅通过对ID进行排序来保持ID和Name配对?

java - ArrayList对象插入排序

java - 如何 : Split while loop with double comparisson into two?

c++ - 将文本文件读入整数数组

c++ - 如何在C++中获取集合的第一个元素