C语言合并两个数组
发布网友
发布时间:2022-04-19 09:47
我来回答
共4个回答
热心网友
时间:2023-09-15 06:27
不知道楼主是要普通的合并然后排序呢还是高级算法里的归并排序。后者的话建议看看百度百科http://ke.baidu.com/view/90797.htm
前者。
#include<stdio.h>
int
main()
{
int
a[100],b[100];
int
anum,bnum,i,j,k,temp;
printf("请输入数组a的元素个数:");
scanf("%d",&anum);
for(i=0;i<anum;i++)//数组a输入
scanf("%d",&a[i]);
printf("请输入数组b的元素个数:");
scanf("%d",&bnum);
for(i=0;i<bnum;i++)//数组b输入
scanf("%d",&b[i]);
k=anum+bnum;//计算数据总个数
for(i=0;i<bnum;i++)//b数组合入a数组
a[anum+i]=b[i];
for(i=0;i<k-1;i++)
//选择排序
for(j=i+1;j<k;j++)
if(a[i]<a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for(i=0;i<k;i++)//输出最终数组
printf("%8d",a[i]);
return
0;
}
热心网友
时间:2023-09-15 06:27
#include <stdio.h>
int main()
{
int a[5]={3,4,5,6,7};
int b[4]={11,22,33,44};
int c[9]={0};
int i=0,j;
for (;i<sizeof(a)/sizeof(int);i++)
c[i]=a[i];
j=i;
for (j=0;j<sizeof(b)/sizeof(int);j++,i++)
c[i]=b[j];
return 0;
}
#include <stdio.h>
int main()
{
int a[5]={3,4,5,6,7};
int b[4]={11,22,33,44};
int c[9]={0};
int i=0,j;
for (;i<5;i++)
c[i]=a[i];
j=i;
for (j=0;j<4;j++,i++)
c[i]=b[j];
return 0;
}
或者用memcpy,更简单
热心网友
时间:2023-09-15 06:28
#include<stdio.h>
void main()
{
int a[5]={3,4,5,6,7};
int b[4]={11,22,33,44};
int c[9]={0};
int i,j;
for (i=0;i<5;i++)
c[i]=a[i];
for (j=0;j<4;j++,i++)
c[i]=b[j];
for(i=0;i<9;i++)
printf("%d,",c[i]);
printf("\n");
}
楼上的答案中间的“j=i”是多余的。
热心网友
时间:2023-09-15 06:28
合并数组的操作,具体算法依赖于合并的规则。
其通用流程如下:
1
建立一个足够容纳两个数组所有元素的目标数组。如果规则规定将一个数组合并到另一个之中,那么需要保证目标数组有可以容纳两个数组的空间,否则会出现越界。
2
遍历其中一个数组,并赋值到目标数组中。如果是一个数组合并到另一个,那么此步可以省略;
3
遍历另一个数组,按照规则插入到目标数组中。
在不同规则下,合并算法会有差异,如将长为lb的b数组附加到长为la的a数组结尾的操作,可以写作
int i;
for(i = 0; i < lb; i ++)
a[la+i]=b[i];而将长度均为l的数组a,b,交替合并到c中,可以写作
int i;
for(i = 0; i < l; i ++)
{
c[i*2] = a[i];
c[i*2+1] = b[i];
}不管是何种方式,合并的本质就是,把a和b的每个元素,赋值到目标数组的对应位置上即可。