【问题标题】:Recursive Insertion Sort Crashes for almost large n几乎大 n 的递归插入排序崩溃
【发布时间】:2016-02-26 13:51:56
【问题描述】:

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

}

我在 ma​​in 中这样称呼它:

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

我不明白问题出在哪里。

【问题讨论】:

    标签: c++ crash insertion-sort


    【解决方案1】:

    我认为您的问题与您的环境中允许的最大递归级别有关。更多详情请见herehere

    [编辑]

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多