合并排序算法无法正常运行

问题描述

合并排序算法无法正常运行。输出值未按升序完全排序。一些值不正确,这表明存在错误。

#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,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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...