核心算法如下,我用的是修改之后的。
//实现两个数组的合并从大到小排序
#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);
}
前面输出都是正常的,后面的输出有问题
如图
C1=merge(A1,B1,&C);