C++算法入门练习题: 合并有序序列
C++算法入门练习题: 合并有序序列
题目描述
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围:
- 1 ≤ n, m ≤ 1000
- 0 ≤ 序列中的值 ≤ 30000
输入描述:
输入包含三行,
- 第一行包含两个正整数 n, m,用空格分隔。n 表示第二行第一个升序序列中数字的个数,m 表示第三行第二个升序序列中数字的个数。
- 第二行包含 n 个整数,用空格分隔。
- 第三行包含 m 个整数,用空格分隔。
输出描述:
输出为一行,输出长度为 n+m 的升序序列,即长度为 n 的升序序列和长度为 m 的升序序列中的元素重新进行升序序列排列合并。
代码实现
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int a[n + m];
// 输入两个升序序列
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
for (int i = n; i < n + m; ++i) {
cin >> a[i];
}
// 使用冒泡排序对合并后的序列进行排序
for (int i = 0; i < n + m - 1; ++i) {
for (int j = 0; j < n + m - i - 1; ++j) {
if (a[j] > a[j + 1]) {
swap(a[j], a[j + 1]);
}
}
}
// 输出排序后的序列
for (int i = 0; i < n + m; ++i) {
cout << a[i] << ' ';
}
cout << endl;
return 0;
}
代码讲解
- 首先,我们读取输入的两个序列的长度
n和m,并创建一个大小为n + m的数组a来存储合并后的序列。 - 接着,我们使用两个循环分别读取两个升序序列,并将它们存储到数组
a中。 - 然后,我们使用冒泡排序算法对数组
a进行排序,将合并后的序列按照升序排列。 - 最后,我们使用一个循环遍历排序后的数组
a,并输出每个元素,从而得到最终的合并后的升序序列。
总结
本题主要考察了数组的基本操作、排序算法以及输入输出的处理。通过这道题的练习,我们可以进一步熟悉 C++ 中数组和排序算法的使用,并提高代码实现能力。
原文地址: https://www.cveoy.top/t/topic/S51 著作权归作者所有。请勿转载和采集!