合并排序数组(蓝桥杯题库)
题目描述
给定排序数组 A 和 B,实现一个算法将 B 按排序顺序合并到 A 中。介绍如下:
-
数组 A 和 B 的均为排序数组,数字按从小到大排列。
-
数组 A 的的长度为 𝑛n,其中前 𝑚m 个为数字,后 𝑛−𝑚n−m 个为
None
;数组 B 的长度为 𝑛−𝑚n−m。 -
需要将数组 B 的数字依次添加到数组 A 中,添加元素后 A 的依旧是排序数组。
输入描述
第一行为两个数字 𝑛,𝑚(1<𝑛,𝑚<1000)n,m(1<n,m<1000),空格隔开,含义如题干所示。
第二行为 𝑛n 个数字,数组 A 中的前 𝑛n 项元素。
第三行为 𝑛−𝑚n−m 个数字,数组 B 中的元素。
输出描述
输出一行,为合并后的 A 数组。
输入输出样例
示例
输入
10 6
1 2 5 7 8 9
2 3 6 10
输出
1 2 2 3 5 6 7 8 9 10
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
-
这个是使用容器按照自己的思路写的#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n, m; cin >> n >> m; vector<int> a(m); for (int i = 0; i < m; ++i) { cin >> a[i]; } vector<int> b(n - m); for (int i = 0; i < n - m; ++i) { cin >> b[i]; } // 将数组 B 的元素插入到 A 的末尾 a.insert(a.end(), b.begin(), b.end()); // 对合并后的数组进行排序 sort(a.begin(), a.end()); // 输出排序后的数组 for (int i = 0; i < n; ++i) { cout << a[i] << " "; } return 0; }
#include <iostream> #include <algorithm> using namespace std; int main() { int n,m; cin >> n >> m; int a[n]; for(int i=0;i<n;i++) { cin >> a[i]; } sort(a,a+n); for(int i=0;i<n;i++) { cout << a[i] << " "; } return 0; }
这个是刷到的大神写的有一点点没太看懂。。。但似乎很简便复杂度感觉更少