#includestdio.h
10年的迭部网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整迭部建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“迭部网站设计”,“迭部网站推广”以来,每个客户项目都认真落实执行。
int main()
{
int aLength;
scanf("%d",aLength);
int a[aLength];
int i,j=0;
for(i=0;iaLength;i++)
{
scanf("%d",a+i);
}
int bLength;
scanf("%d",bLength);
int b[bLength];
for(i=0;ibLength;i++)
{
scanf("%d",b+i);
}
int allLength=aLength+bLength;
int c[allLength];
for(i=0;iaLength;i++)
{
c[i]=a[i];
}
for(i=aLength;iallLength;i++)
{
c[i]=b[j];
j++;
}
for(i=0;iallLength;i++)
{
printf("%d ",c[i]);
}
return 0;
}
int main() {
char a[] = "123456";
char b[] = "abcde";
int buflen = strlen(a) + strlen(b);
char *p = (char*)malloc(buflen + 1);
memset(p, 0, buflen);
printf("%d\n", buflen);
strcpy(p, a);
strcat(p, b);
printf("%s\n", p);
free(p);
}
C的数组在创建后不可变得,因此数组合并的思想就是把数组塞到一个足够大的空间里形成新数组。
上面的函数是比较简单的合并方法
//两个数组合并,参考代码:
#include "stdio.h"
int d=0; //用于记录数组c的大小,和数组c的输出类的一些操作
void main()
{
int a[50],b[50],c[100];
int i,j,k; //i表示a数组的大小 j表示b数组的大小 k用于数组的输出
printf("数组a的输入,输入一个数,表明你要输入多少个数到数组a中\n");
scanf("%d",i);
for(k=0;ki;k++)
scanf("%d",a[k]);
printf("数组b的输入,输入一个数,表明你要输入多少个数到数组b中\n");
scanf("%d",j);
for(k=0;kj;k++)
scanf("%d",b[k]);
void px(int *p,int n); //声明 排序 冒泡法
px(a,i); //调用
px(b,j); //调用
void prin(int *p,int n); //声明 数组的输出函数
prin(a,i);
prin(b,j);
void hb(int *o,int *p,int *q,int m,int n); //声明 两个数组的合并函数 前提:这俩个数组必须是排好序的
hb(c,a,b,i,j);
prin(c,d);
}
void px(int *p,int n) //自定义函数 排序 冒泡法
{int i,j,t,leap;
for(i=0;in-1;i++) //外层循环n-1次,一次循环沉淀一个数
{
leap=0; //leap作为标记,是否两数相换
for(j=0;jn-i-1;j++) //内循环n-i-1次
{
if(p[j]p[j+1]) //比较两个数
{
t=p[j];
p[j]=p[j+1];
p[j+1]=t; //来两个数交换
leap=1; //交换了,标记leap=1
}
}
if(leap==0) break; //经历了一个内for循环,leap==0的话,表明排序成功了,不需要接下来在排序了。
}
}
void prin(int *p,int n) //自定义函数 数组输出函数
{
int k,sum=0;
for(k=0;kn;k++)
{
printf("%d ",p[k]);
sum++;
if(sum%10==0) printf("\n");
}
printf("\n");
}
void hb(int *o,int *p,int *q,int m,int n) //m为p指向数组的大小 n为q指向数组的大小 指针o指向合并的数组
{
int i=0,j=0,k; //i为p指向数组的大小 j为q指向数组的大小
while(1)
{
if(p[i]q[j])
{
o[d]=p[i];
i++;
d++;
}
else
{
o[d]=q[j];
j++;
d++;
}
if(i==m||j==n) break;
}
if(i==m)
{
for(k=j;kn;k++)
{
o[d]=q[k];
d++;
}
}
if(j==n)
{
for(k=i;km;k++)
{
o[d]=p[k];
d++;
}
}
}
代码文本:
#include "stdio.h"
int input(int *p,int n){
char i,ch;
for(i=0;in;i++){
if((ch=getchar())=='\n')
break;
else if(ch='0' ch='9')
ungetc(ch,stdin);
scanf("%d",p+i);
}
return i;
}
int main(int argc,char *argv[]){
int a[21],b[10],i,j,k;
printf("Input array a...\n");
i=input(a,10);
printf("and input array b...\n");
j=input(b,10);
for(k=0;kj;a[i++]=b[k++]);
for(j=0;ji;printf("%d ",a[j++]));
putchar('\n');
return 0;
}
//O(n),完成合并
#includestdio.h
int merge(int a[],int b[],int n,int m){//合并两个有序数组
//原理是归并排序的合并阶段
//两个有序数组合并,仍保持有序
int i=0,j=0;
int c[100]={0};//存储合并后的数组
int k=0;
while(injm){
if(a[i]b[j]){
c[k++]=a[i++];
}
else{
c[k++]=b[j++];
}
}
while(in){
c[k++]=a[i++];
}
while(jm){
c[k++]=b[j++];
}
for(int i=0;ik;i++){
a[i]=c[i];//合并后的数组存入a数组
}
return k;//返回合并后的数组长度
}
void print(int a[],int n){//打印数组
for(int i=0;in;i++){
printf("%d ",a[i]);
}
printf("\n");
}
int main(){
int a[20]={1,2,3};
int b[20]={4,5,6};
int c[20]={7,8,9};
int len1=3;//数组a的长度
int len2=3;//数组b的长度
int len3=3;//数组c的长度
int len=0;//合并数组长度
//经过两次合并
len=merge(a,b,len1,len2);//数组a,b合并,存入数组a
printf("a,b合并\n");
print(a,len);//打印a,b合并结果
len=merge(a,c,len,len3);//数组a,b,c合并,存入数组a
printf("a,b,c合并\n");
print(a,len);//打印a,b,c合并结果
return 0;
}