当我在VS2013中运行快速排序程序时,我收到以下错误:“quicksort.exe中0x008B18D9的第一次机会异常:0xC00000FD:堆栈溢出(参数:0x00000001,0x00232F68)。
如果存在此异常的处理程序,则可以安全地继续该程序。“
void part(int arr[], int min, int max)
{
srand(time(NULL));
*emphasized text*int pivot, l, i;
if ((max - min) > 0)
{
pivot = rand() % max;
swap(arr, pivot, max);
l = 0;
for (i = 0; i < max; i++)
{
if (arr[i] < arr[max])
{
swap(arr, i, l);
l++;
}
}
swap(arr, l, max);
part(arr, min, (l - 1));
part(arr, (l + 1), max);
}
}
告诉你。
答案 0 :(得分:2)
枢轴的选择应在min
和max-1
之间。你需要这样的东西:
pivot = min + rand() % (max - min);
答案 1 :(得分:0)
首先尝试递归到数组的较小部分:
if (2 * l < max - min) {
part(arr, min, (l - 1));
part(arr, (l + 1), max);
} else {
part(arr, (l + 1), max);
part(arr, min, (l - 1));
}
这将删除随机递归深度并使其成为对数。