Почему мой «слияние» не работает при большом количестве чисел? - PullRequest
0 голосов
/ 24 января 2019

У меня есть код слияния, он хорошо работает с N = 68 000 или менее, но когда число чисел увеличивается до 70 000, возникает ошибка, что некоторые элементы не сортируются. Мой друг, наверное, потому, что я использовал слишком много malloc, но я не знаю почему.

keytype - это просто тип unsigned long, определенный мной. А является предварительно установленным массивом тип ключа * A = (тип ключа *) malloc (N * sizeof (тип ключа)); и заполнены случайными числами.

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...