2025年合并数组c语言代码(c语言合并数组的函数)

合并数组c语言代码(c语言合并数组的函数)合并两个有序数组 2 要求实现一个函数 merge 将素个数为 m 的升序数组 a 和长度为 n 的升序数组 b 合并到数组 a 合并后的数组仍然按升序排列 假设数组 a 的长度足够大 函数接口定义 void printArray int arr int arr size nbsp 打印数组 细节不表 void merge int a int m int b int n 合并 a 和 b 到 a 其中 a 和 b 是按升序排列的数组 m 为数组 a 中素的个数 n 为数组 b 的长度



合并两个有序数组(2)

要求实现一个函数merge,将元素个数为m的升序数组a和长度为n的升序数组b合并到数组a,合并后的数组仍然按升序排列。假设数组a的长度足够大。

函数接口定义:

void printArray(int* arr, int arr_size);  /* 打印数组,细节不表 */

void merge(int* a, int m, int* b, int n); /* 合并a和b到a */

其中a和b是按升序排列的数组,m为数组a中元素的个数,n为数组b的长度;合并后的升序数组仍然存放在a中。

裁判测试程序样例:

#include <stdio.h>

#include <stdlib.h>

void printArray(int* arr, int arr_size);  /* 打印数组,细节不表 */

void merge(int* a, int m, int* b, int n); /* 合并a和b到a */

int main(int argc, char const *argv[])

{

    int m, n, i;

    int *a, *b;

    scanf("%d %d", &m, &n);

    a = (int*)malloc((m + n) * sizeof(int));

    for (i = 0; i < m; i++) {

        scanf("%d", &a[i]);

    }

    b = (int*)malloc(n * sizeof(int));

    for (i = 0; i < n; i++) {

        scanf("%d", &b[i]);

    }

    merge(a, m, b, n);

    printArray(a, m + n);

    free(a); free(b);

    return 0;

}

/* 请在这里填写答案 */

输入样例:

输入包含三行。

第一行为两个整数m和n,分别为数组a和数组b中元素的个数。

第二行为包含m个整数的有序数组a。

第三行为包含n个整数的有序数组b。

7 11

1 2 14 25 33 73 84

5 6 17 27 68 68 74 79 80 85 87

输出样例:

输出为合并后按升序排列的数组。

1 2 5 6 14 17 25 27 33 68 68 73 74 79 80 84 85 87

参考代码:

void merge(int* a, int m, int* b, int n)

{

    int x=m-1,y=n-1,z=m+n-1;

    while(x>=0&&y>=0)

        a[z--]=a[x]>b[y]?a[x--]:b[y--];

    while(y>=0)

        a[z--]=b[y--];

}




编程小号
上一篇 2025-02-06 17:40
下一篇 2025-02-25 08:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/45063.html