题解 | #有序序列合并#
有序序列合并
http://www.nowcoder.com/practice/a9e943b0dab142759807d0cfb6863897
#include<stdio.h>
#include<malloc.h>
int main(void)
{
int num1,num2;
int *arr1,*arr2,*new;
scanf("%d %d",&num1,&num2);
arr1=(int *)malloc(sizeof(int)*num1);
arr2=(int *)malloc(sizeof(int)*num2);
new=(int *)malloc(sizeof(int)*(num1+num2));//定义一个新数组用来装合并后的元素
for(int i=0;i<num1;i++)
scanf("%d",&arr1[i]);
for(int i=0;i<num2;i++)
scanf("%d",&arr2[i]);
int l=0,r=0;//定义两个下标,用来指向正在比较num1数组元素和num2数组元素,一开始从0开始
int h=0;//定义new数组的计数下标
while(l<num1&&r<num2)//两个数组中的元素比较,哪个小放进new数组中,直到有一个数组被比较完
{
if(arr1[l]<=arr2[r])
{
new[h]=arr1[l];
h++;
l++;
}
if(arr1[l]>arr2[r])
{
new[h]=arr2[r];
h++;
r++;
}
}
while(l<num1)//比较完之后看arr1和arr2哪个数组元素还没复制到new数组中,则将其全部复制到new数组中
{
new[h]=arr1[l];
h++;
l++;
}
while(r<num2)
{
new[h]=arr2[r];
h++;
r++;
}
for(int i=0;i<num2+num1;i++)
printf("%d ",new[i]);
return 0;
}