У меня есть код слияния, он хорошо работает с 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);
}