数据机构实现数组合并排序输出

数据结构实现两个排序数组合并后的排序输出。

核心算法如下,我用的是修改之后的。

img

//实现两个数组的合并从大到小排序
#include"stdio.h"
#define MAXSIZE 20
typedef struct uninlist
{
    int elem[MAXSIZE];
    int length;
}linklist;
//顺序表创建函数
linklist input(linklist L)
{
    int j;
    for(j=0;j<L.length;j++)
    scanf("%d",&L.elem[j]);
    return L;
}
//顺序表输出函数
void output(linklist L)
{
    int j;
    for(j=0;j<L.length;j++)
    printf("%d  ",L.elem[j]);
}
//两个顺序表合成一个顺序表然后数值进行从大大小进行排列
linklist merge(linklist A,linklist B,linklist *C)
{
    int i,j,k;
    i=0,j=0,k=0;
    while (i<=((A.length)-1) && j<=((B.length)-1))//判断A和B都不为空
    {
        if (A.elem[i]<=B.elem[j])
            C->elem[k++]=A.elem[i++];
        else
            C->elem[k++]=B.elem[j++];
    }
    while (i<=A.length-1)
    {
        C->elem[k++]=A.elem[i++];//将A剩余部分放到C的后面
    }
    while (j<=B.length-1)
    {
        C->elem[k++]=B.elem[j++];//将B剩余部分放到C的后面
    }
    C->length=k;
    return(*C);
}
void main()
{
    linklist A,B,C,A1,B1,C1;
    printf("请输入顺序表A中元素的个数:");
    scanf("%d",&A.length);
    printf("请依次输入顺序表中的元素:\n");
    A1=input(A);
    output(A1);
    printf("\n请输入顺序表B中的元素的个数:");
    scanf("%d",&B.length);
    printf("请依次输入顺序表中的元素:\n");
    B1=input(B);
    output(B1);
    C.length=A.length+B.length;
    C1=merge(A,B,&C);
    printf("合并后的数组元素为:\n");
    output(C1);
}

运行结果及报错内容

前面输出都是正常的,后面的输出有问题
如图

img

进行分析了一下,猜测输出是元素的物理地址,但是代码没有问题,应该输出的是元素具体的值。
我想要达到的结果:1223334

C1=merge(A1,B1,&C);