#C03L03P07. C03.L03.数组双指针移动和有序数组的合并.例题2.有序数组的合并
C03.L03.数组双指针移动和有序数组的合并.例题2.有序数组的合并
题目描述
输入两个正整数 N 和 M ,输入 N 个数放到 a 数组里面,输入 M 个数放到b数组里面,a ,b 数组都为从小到大排序的数组,要求把两个数组合并,并使新的数组仍然是有序的,输出新数组。
输入格式
第 1 行 2 个正整数:N,M,范围在 [1,8000000]。
第 2 行 N 个可以相同的正整数:范围在 [1,8000000]。
第 3 行 M 个可以相同的正整数:范围在 [1,8000000]。
输出格式
一行, N+M 个数,为合并后的数组。
样例
5 4
1 3 5 7 9
2 4 6 8
1 2 3 4 5 6 7 8 9
程序填空
#include<bits/stdc++.h>
using namespace std;
int n,m,a[8000001],b[8000001],c[16000001];
int main()
{
scanf("%d %d",&n,&m);
int i,j,k,l;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=m;i++)
scanf("%d",&b[i]);
k=1;
for(i=1,j=1;i<=n&&j<=m;k++)
{
if(a[i]<=b[j])
{
c[k] = a[i];
i++;
}
else
{
c[k] = b[j];
填空(1) ;
}
}
//如果 a[n]<=b[m],那么i指针会先到达 n ,否则j指针会先到达 m
//这意味着还有一些数据没有搬到 c 数组
if(填空(2))
{
for(l=i;l<=n;l++,k++)
c[k] = a[l];
}
else
{
for(l=j;填空(3);l++,k++)
c[k] = b[l];
}
for(i=1;i<k;i++) // k = n + m + 1
printf("%d ",c[i]);
return 0;
}
填空(1): {{ input(1) }}
填空(2): {{ input(2) }}
填空(3): {{ input(3) }}
相关
在以下作业中: