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

Recursive Insertion Sort Crashes for almost large n

本文关键字:于大 插入排序 崩溃 递归      更新时间:2023-10-16

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

主要这样称呼它:

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

我不明白问题出在哪里。

我认为

您的问题与您的环境中允许的最大递归级别有关。更多细节可以在这里和这里找到。

[编辑]

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