合并排序算法无法正常运行。输出值未按升序完全排序。一些值是乱序的,表明存在错误。
#include <stdio.h>
#include <stdlib.h>
void merge(int *L, int *R, int *a, int nL, int nR) {
int i, j, k;
i = j = k = 0;
while ((i < nL) && (j < nL)) {
if (L[i] < R[j]) {
a[k] = L[i];
++i;
} else {
a[k] = R[j];
++j;
}
++k;
}
while (i < nL) {
a[k] = L[i];
++i;
++k;
}
while (j < nR) {
a[k] = R[j];
++j;
++k;
}
}
void mergeSort(int *a, int n) {
if (n < 2)
return;
int i, mid, *L, *R;
mid = n / 2;
L = (int *)malloc(mid * sizeof(int));
R = (int *)malloc((n - mid) * sizeof(int));
for (i = 0; i < mid; ++i) {
L[i] = a[i];
}
for (i = mid; i < n; ++i) {
R[i - mid] = a[i];
}
mergeSort(L, mid);
mergeSort(R, n - mid);
merge(L, R, a, mid, n - mid);
free(L);
free(R);
}
int main() {
int i, n, *a;
scanf("%d", &n);
a = (int *)malloc(n * sizeof(int));
for (i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
mergeSort(a, n);
for (i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
free(a);
return 0;
}
例如,对于以下输入: 10 10 9 8 7 6 5 4 3 2 1
我应该得到以下输出: 1 2 3 4 5 6 7 8 9 10
但是输出不是按升序排列的。输出为:1 3 4 5 2 6 8 9 10 7
不确定是否涵盖了所有问题,但
while((i < nL) && (j < nL))
应该
while((i < nL) && (j < nR))
^
note
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句