题解 | #有序序列合并#

有序序列合并

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;
}
全部评论

相关推荐

但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 17:58
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务