Quicksort Lomuto&霍尔。分区函数中的Stackoverflow异常

时间:2015-11-16 13:13:04

标签: c++ windows exception mingw stack-overflow

欢迎,我必须使用MinGW在C ++中编写Quicksort Lomuto和Hoare变体。

所以,我已经做到了。算法适用于数组[N],其中N是5,20,100这样的小数,但我需要在N = 200 000时进行。并且有例外。我不知道为什么。其他算法(插入,选择,Heapsort等适用于N = 200 000)。

这是我的代码:

<Response>
    <Dial>
        <Number url="other-script">
            4151234567
        </Number>
    </Dial>
</Response>

我正在以这种方式创建数组:

int PartitionLomuto(int A[], int p, int r)
{
    int x = A[r],
    i = p - 1,
    temp;

    for (int j = p; j <= r - 1; j++)
        if (A[j] <= x) {
            i++;
            temp = A[i];
            A[i] = A[j];
            A[j] = temp;
        }
        temp = A[i + 1];
        A[i + 1] = A[r];
        A[r] = temp;
        return i + 1;
}

void Lomuto (int A[], int p, int r)
{
    if (p < r) {
        int q = PartitionLomuto(A, p, r);
        Lomuto(A, p, q - 1);
        Lomuto(A, q + 1, r);
    }
}

//* **************************************************

int PartitionHoare(int A[], int p, int r)
{
    int x = A[p],
    i = p,
    j = r,
    temp;

    while(true) {
        while(A[j] > x)
            j--;
        while(A[i] < x)
            i++;
        if(i < j) {
            temp = A[i]; 
            A[i] = A[j];
            A[j] = temp;
            i++;
            j--;
        }
        else
            return j;
    }
}

void Hoare(int A[], int p, int r)
{
    if(p < r) {
        int q = PartitionHoare(A, p, r);
        Hoare(A, p, q);
        Hoare(A, q + 1, r);
    }
}

以这种方式调用函数:

int const arraySize = 200000;

int *ascending = new int[arraySize],
    *descending = new int[arraySize],
    *random = new int[arraySize];

异常在分区功能中。

我真的不知道会发生什么。我认为算法是正确的。

0 个答案:

没有答案