C语言求助~!!!

试写出算法:将数组a和b合并为递增有序数组c[1..m+n]。有m个整数的递增有序数组a[1..m]有n个整数的递减有序数组b[1..n].要求算法的时间复杂度为O(m+... 试写出算法:将数组a和b合并为递增有序数组c[1..m+n]。
有m个整数的递增有序数组a[1..m]
有n个整数的递减有序数组b[1..n].
要求算法的时间复杂度为O(m+n).
展开
 我来答
ChatGPT评世界
2007-11-22 · TA获得超过119个赞
知道小有建树答主
回答量:782
采纳率:25%
帮助的人:281万
展开全部
#include <stdlib.h>//malloc,free
#include <stdio.h>//printf

void merge(int* a, int m, int*b, int n, int*rt)
{
int* pa = a;
int* pb = b+n-1;
while(pa<a+m && pb>b-1)
{
if(*pa < *pb)
{
*rt = *pa;
pa++;
rt++;
}
else
{
*rt = *pb;
pb--;
rt++;
}
}
while(pa<a+m)
{
*rt = *pa;
pa++;
rt++;
}
while(pb>b-1)
{
*rt = *pb;
pb--;
rt++;
}
}

void dump(int* arr, int n, char* name)
{
int i;
printf("%s:\n",name);
for(i=0; i<n; i++)
{
printf("[%d]=%d,",i,*(arr+i));
}
printf("\n");
}

int main(int argc, char** argv)
{
int a[]={0,2,5,6,7,10,12,15,20};
//int a[]={10,12,15,20};
int m=sizeof(a)/sizeof(int);
//int b[]={10,8,5,4,4,2,1};
int b[]={30,29,21};
int n=sizeof(b)/sizeof(int);
int* c=malloc(sizeof(int)*(m+n));
if(NULL==c) return -1;
dump(a,m,"a");
dump(b,n,"b");
merge(a,m,b,n,c);
dump(c,m+n,"c");
free(c);
return 0;
}

和你的要求有一点不同的是,下标是从0开始的。
程序在GCC 4.1.2下编译运行通过。

参考资料: http://www.herofit.cn

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萌哒牛
2007-11-22 · TA获得超过1910个赞
知道小有建树答主
回答量:1100
采纳率:0%
帮助的人:117万
展开全部
#define m 5
#define n 3
main()
{
int i,j,t,z=0;
int a[m]={1,2,3,4,5},b[n]={9,8,7},c[8];
for (i=0;i<m;i++)
c[z++]=a[i];
for (j=0;j<n;j++)
c[z++]=a[j];
for (i=0;i<z-1;i++)
for (j=i+1;j<z;j++)
if (c[i]>c[j])
{
t=c[j];
c[j]=c[i];
c[i]=t;
}
for (i=0;i<z;i++)
printf("%3d",c[i]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一变班爱麻啊堡0J
高粉答主

2020-01-13 · 醉心答题,欢迎关注
知道答主
回答量:11.4万
采纳率:2%
帮助的人:5537万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式