安工 pta 第五章作业与实验(C语言) 7-11 合并数组

题目描述

已知两个升序数组,将它们合并成一个升序数组并输出。例如:数组array1={3,6,13,35,54},数组array2={14,19,26,32},
合并为新的数组array={3,6,13,14,19,26,32,35,54}。

输入格式:

输入两行升序整数,当每行输入0时,表示输入结束。每行整数的个数1<=N<=10。

输出格式:

输出合并后的升序数组。(最后一个数据后有一个空格)

输入样例:

在这里给出一组输入。例如:

3 6 13 35 54 0
14 19 26 32 0

输出样例:

在这里给出相应的输出。例如:

3 6 13 14 19 26 32 35 54 

代码:

#include <stdio.h>
void merge(int array1[], int n1, int array2[], int n2, int array3[]){
    int i = 0, j = 0, k = 0;

    while (i < n1 && j < n2){         //这个循环用于比较两个数组中的元素
        if (array1[i] <= array2[j])   //并将较小的元素存储到 array3
            array3[k++] = array1[i++];//当其中一个数组的所有元素都被处理后,循环终止
        else
            array3[k++] = array2[j++];
    }
    while (i < n1)                //这两段代码分别处理 array1 和 array2 中剩余的元素
        array3[k++] = array1[i++];//(如果有的话)这些元素之前没有被放入 array3
    while (j < n2)                //因为它们大于 array3 中已经存在的所有元素
        array3[k++] = array2[j++];//但是现在,我们将它们添加到 array3 的末尾
}
int main(){
    int array1[10], array2[10], array3[20];
    int n1, n2, i;

    for (i = 0; i < 10; i++){
        scanf("%d", &array1[i]);
        if (array1[i] == 0)
            break;
    }
    n1 = i;

    for (i = 0; i < 10; i++){
        scanf("%d", &array2[i]);
        if (array2[i] == 0)
            break;
    }
    n2 = i;

    merge(array1, n1, array2, n2, array3);

    for (i = 0; i < n1 + n2; i++)
        printf("%d ", array3[i]);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩荩さん!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值