快速排序中的堆栈溢出错误

时间:2014-05-08 15:13:49

标签: c quicksort

当我在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);
    }
}

告诉你。

2 个答案:

答案 0 :(得分:2)

枢轴的选择应在minmax-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));
}

这将删除随机递归深度并使其成为对数。