递归插入排序崩溃几乎对于大 n
Recursive Insertion Sort Crashes for almost large n
>我写了一个可以正常工作的递归插入排序,但问题是如果我设置 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);
我不明白问题出在哪里。
我认为
您的问题与您的环境中允许的最大递归级别有关。更多细节可以在这里和这里找到。
[编辑]
如果您不控制最大递归级别(例如在输入可能非常大的情况下),最好避免递归并使用迭代算法(即使用 while
、for
等)。这里解释了这个问题,本文很好地介绍了如何将递归算法实际转换为非递归算法。
相关文章:
- 这是插入排序的正确实现吗?
- 使用列表 STL 递归进行插入排序
- 列表 iter 不取消引用 使用列表进行插入排序
- 如何使插入排序更快?
- 插入排序的最小交换
- 双链表C++上的插入排序
- 如何在插入排序中使用 replace() 使语句变得不必要
- C++插入排序错误功能不起作用
- 如何在不通过插入排序更改原始矢量的情况下对 2D 矢量进行排序
- 插入排序打印错误的输出
- 从矢量末尾开始的插入排序
- 插入排序:我做错了什么?
- 插入排序的向量<unique_ptr<对时避免堆分配<>>>
- 获取有趣的输出以进行插入排序
- 插入排序算法在放入函数时的行为不同
- 插入排序的Valgrind Invalid读取尺寸8的尺寸
- 插入排序与插入/擦除?(所以我需要对一个向量进行排序,而不是手工做事,而是使用插入和擦除
- 堆排序和插入排序
- 计数Heapsort和插入排序中的复制和比较数
- 递归插入排序崩溃几乎对于大 n