我有一个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);
}