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