为什么我的“合并排序”失败了很多?

时间:2019-01-23 22:52:36

标签: c

我有一个mergesort的代码,它在N = 68,000或更少时可以很好地工作,但是当数字的数量增加到70,000时,会出现一些未排序元素的错误。我的朋友猜这是因为我使用了太多的malloc,但是我不知道为什么。

keytype只是我自己定义的“ unsigned long”类型。 A是一个预设数组 keytype * A =(keytype *)malloc(N * sizeof(keytype)); 并用随机数填充。

typedef unsigned long keytype;
keytype *new_part(int start, int end, keytype* A) {
    int N = end - start + 1;
    keytype* cc = (keytype *)malloc(N * sizeof(keytype));
    for (int i = 0; i < N; i++) {
        cc[i] = A[start + i];
    }
    return cc;
}
void mySort(int N, keytype* A){
    if (N == 1) return;
    int mid = N / 2;
    keytype* first = new_part(0, mid - 1, A);
    keytype* second = new_part(mid, N - 1, A);
    mySort(mid, first);
    mySort(N - mid, second);
    int a = 0, b = 0;
    for (int i = 0; i < N; i++) {
        if (a >= mid) {
            A[i] = second[b];
            b++;
            continue;
        }
        if (b >= N - mid) {
            A[i] = first[a];
            a++;
            continue;
        }
        if (first[a]>second[b]) {
            A[i] = second[b];
            b++;
            continue;
        }
        if (first[a] < second[b]) {
            A[i] = first[a];
            a++;
            continue;
        }
    }
    free(first);
    free(second);
}

0 个答案:

没有答案