【发布时间】:2017-02-05 09:35:26
【问题描述】:
我已经分配了在 C++ 中实现 Quicksort 的任务,并且我已经成功地编写了似乎可以工作的代码。当我测试我的算法是否失败时,当我让它在一个包含一百万个元素的二进制文件中对数字进行排序时,它崩溃了。请注意,我有两个文件,每个文件都有一百万个元素。其中一个是未排序的,另一个是“几乎排序的”,我的算法似乎只在对“几乎排序”的文件进行排序时失败。这是我的代码的样子:
int partition(int arr[], int low, int high)
{
int pivotI = low; //pivot index
int pivot = arr[pivotI];
int temp = arr[low];
arr[low] = pivot;
arr[pivotI] = temp;
int partitionI = low;
low++;
while (low <= high)
{
if (arr[low] >= pivot)
{
if (arr[high] <= pivot)
{
temp = arr[high];
arr[high] = arr[low];
arr[low] = temp;
low++;
}
high--;
}
else if (arr[high] <= pivot)
{
low++;
}
else
{
low++;
high--;
}
}
if (low == high)
{
if (arr[low - 1] < pivot)
{
temp = arr[low];
}
else
{
temp = arr[low - 1];
}
}
else
{
temp = arr[high];
}
arr[high] = arr[partitionI];
arr[partitionI] = temp;
return high;
}
void quickSort(int arr[], int left, int right)
{
if (left < right)
{
int p = partition(arr, left, right);
quickSort(arr, left, p);
quickSort(arr, p + 1, right);
}
}
*当我运行“几乎排序”的二进制文件时,我得到一个堆栈溢出错误。知道为什么会这样吗? 谢谢
【问题讨论】:
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
很可能递归太深了。
标签: c++ algorithm sorting stack-overflow quicksort