为什么我的QuickSort溢出?

时间:2013-11-30 11:46:02

标签: c++ quicksort partitioning

我正在尝试使用随机数据块

来实现QuickSort()

当我没有随机化枢轴,并选择它为A [0]时一切正常, 但是当我实施随机化时,事情就变得疯狂了。

分区:

int Partition(int A[], int left, int right, int pivot = 0)
{
    swap(A[left], A[pivot]);

    int temp = right;

    while (pivot != temp)
    {
        // make a swap if needed
        if (A[pivot] > A[temp] && temp > pivot || A[temp] > A[pivot] && temp < pivot)
        {
            // swap both data and index
            swap(A[pivot], A[temp]);
            swap(pivot, temp);
        }

        // advance the temp towards pivot
        if (temp < pivot)
            temp++;
        else
            temp--;
    }
return pivot;
}

快速排序:

void QuickSort(int A[], int left, int right)
{
    int pivot;

    if (left < right) {
        // randomize pivot
        srand(time(NULL));
        pivot = rand() % (right - left + 1);

        // partition and call quicksort
        pivot = Partition(A, left, right, pivot);
        QuickSort(A, left, pivot - 1);
        QuickSort(A, pivot + 1, right);
    }
}

1 个答案:

答案 0 :(得分:1)

这是一个问题:

pivot = rand() % (right - left + 1);

需要

pivot = left + rand() % (right - left + 1);