c语言 合并数组并排序问题

#include<stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
int j = 0;

int *b;
int *a;

int N;
int M;

printf("请输入第一个数组的个数: ");
scanf("%d", &N);
printf("\n");

a = (int *) malloc(N * sizeof(int));//int 可以用*a来代替
printf("请输入第一个数组的数值:\n");
//获取第一个数组的值
for(i = 0; i < N; i++)
{

scanf("%d",&a[i]);

}

printf("\n");

printf("请输入第二个数组的个数: ");
scanf("%d", &M);
printf("\n");

b = (int *) malloc(M * sizeof(int));//int 可以用*a来代替
printf("请输入第二个数组的数值:\n");
//获取第二个数组的值

for(j = 0; j < M; j++)
{

scanf("%d",&b[j]);

}
/*
printf("你输入的数组1为:\n");
for(i = 0; i < N; i++)
{
printf("%-6d",a[i]);
}
printf("\n");

printf("你输入的数组2为:\n");
for(j= 0; j < M; j++)
{
printf("%-6d",b[j]);
}

printf("\n");
printf("排序后:\n");
*/

//排序数组a

for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
if (a[i]<a[j])
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
for(i = 0; i < N; i++)
{
printf("%-6d",a[i]);
}
//排序数组b
for(i=0;i<M;i++)
for(j=i+1;j<M;j++)
if (b[i]<b[j])
{
int t=b[i];
b[i]=b[j];
b[j]=t;
}
//输出a数组
for(i = 0; i < N; i++)
{
printf("%-6d",a[i]);

}
printf("\n");
//输出B数组
for(i = 0; i < M; i++)
{
printf("%-6d",b[i]);
}
//两个数组排序完成

int z = 0;
int x=0,d=0;
int c[N+M];
while (x < N && d < M)
// 循环一直进行到拷贝完某一个数组的元素为止
{
if (a[x] < b[d])
// 拷贝a[]的元素
{
c[z++] = a[x++];
}
else if (a[x] >= b[d])
// 拷贝b[]的元素
{
c[z++] = b[d++];
}

}
// 如果a[]已经被拷贝完毕就拷贝b[]的元素
if (x == N)
{
while (d < M)
c[z++] = b[d++];
}
else
// 如果b[]已经被拷贝完毕就拷贝a[]的元素
{
while (x < N)
c[z++] = a[x++];
}

free(a);
free(b);
for(int q=0;q<n;q++)
printf("%d",c[q]);
printf("\n");
return 0;
}
代码功能是这样的。。。先分别输入两个数组。。然后对这两个数组过行完排序后。在将两个数组合并到第三个数组中进行排序。。。
上面是我写的代吗。。。
有错误。。我也不知道那错了。。
有高手能告诉我怎么处理吗。或更好的方法。。

我只有这么点分了。。希望那位大侠能帮个忙。。先在这谢谢。。。
说的方法最好带个实例。。不然我可能看不懂。。或不知道用。。

#include<stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
int j = 0;
int *b;
int *a;
int N;
int M;
int z = 0;
int x=0,d=0;
int *c;
int q;

printf("??入第一个数?的个数: ");
scanf("%d", &N);
printf("\n");
a = (int *) malloc(N * sizeof(int));
printf("??入第一个数?的数?:\n");
for(i = 0; i < N; i++)
{
scanf("%d",&a[i]);
}
printf("\n");
printf("??入第二个数?的个数: ");
scanf("%d", &M);
printf("\n");
b = (int *) malloc(M * sizeof(int));
printf("??入第二个数?的数?:\n");
for(j = 0; j < M; j++)
{
scanf("%d",&b[j]);
}
for(i=0;i<N;i++) {
for(j=i+1;j<N;j++) {
if (a[i]<a[j])
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i = 0; i < N; i++) {
printf("%-6d",a[i]);
}
printf("\n");
for(i=0;i<M;i++) {
for(j=i+1;j<M;j++) {
if (b[i]<b[j]) {
int t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
for(i = 0; i < M; i++)
{
printf("%-6d",b[i]);
}
printf("\n");
c = (int *) malloc((N + M) * sizeof(int));
while (x < N && d < M)
{
if (a[x] > b[d])
{
c[z++] = a[x++];
}
else
{
c[z++] = b[d++];
}

}
if (x == N)
{
while (d < M)
c[z++] = b[d++];
}
else
{
while (x < N)
c[z++] = a[x++];
}

for (q = 0; q < N + M; q++){
printf("%-6d", c[q]);
}
printf("\n");
free(a);
free(b);

return 0;
}
有几处语法错误
温馨提示:答案为网友推荐,仅供参考
相似回答