将2个按升序排列的整数数列,仍然按升序合并,存放到另一个数组中,要求每个数依次插入恰当的位置,也就是一次到位,不得在新数组中重新排序。
输入提示:
先输入两个整数,分别为以下两行升序数列的长度,然后输入两行升序整数数列。
输出提示:
输出仅一行升序数列。
输入样本:
4 3
1 3 4 7
2 3 6
输出样本:
1 2 3 3 4 6 7
两个数组的元素从第一个开始逐个比较,哪个更小就加入新数组,然后指向下一个元素。
#include <stdio.h>
int main()
{
int a[100],b[100],c[200];
int i,j,n,m,k=0;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
scanf("%d",&b[i]);
i=0;
j=0;
while(i<n && j<m)
{
if(a[i] >= b[j])
{
c[k++] = b[j];
j++;
}
else
{
c[k++] = a[i];
i++;
}
}
if(i<n)
{
for(j=i;j<n;j++)
c[k++] = a[j];
}
else if(j<m)
{
for(i=j;i<m;i++)
c[k++] = b[i];
}
for(i=0;i<k;i++)
printf("%d ",c[i]);
return 0;
}
你题目的解答代码如下:
#include <stdio.h>
void main()
{
int n,m,i,j=0,k=0,l=0;
scanf("%d%d", &n, &m);
int a[n];
int b[m];
int c[n+m];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<m;i++){
scanf("%d",&b[i]);
}
while (j<n || k<m)
{
if (k>=m || (i<n && a[j]<b[k]))
c[l++] = a[j++];
else
c[l++] = b[k++];
}
for(i=0;i<l;i++){
printf("%d ",c[i]);
}
}
如有帮助,望采纳!谢谢!