给俩非递减数组,长度m,n,用o(m+n)实现将两个数组归并到第一个数组
且使用顺序表。
#include<stdio.h>
#include <stdlib.h>
#define N 50
void swap(int * a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}
bool combine(int a[],int b[],int m,int n)
{
if(n==0)
{
return 1;
}
int i=m-1;
int j=n-1;
int newidx=m+n-1;//从新数组最后往前归并不会覆盖
while(i>=0&&j>=0)
{
if(a[i]>=b[j])
{
a[newidx--]=a[i--];
}else
{
a[newidx--]=b[j--];
}
}
while(i>=0)
a[newidx--]=a[i--];
while(j>=0)
a[newidx--]=b[j--];
return 1;
}
int main()
{
int a[2*(N)]={0};
int b[N]={0};
int m,n;
scanf("%d%d",&m,&n);
int i=0;
for(;i<m;i++)
{
scanf("%d",a+i);
}
int j=0;
for(;j<n;j++)
{
scanf("%d",b+j);
}
combine( a, b, m, n);
}