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;
}

代码讲解

  1. 首先,我们读取输入的两个序列的长度 nm,并创建一个大小为 n + m 的数组 a 来存储合并后的序列。
  2. 接着,我们使用两个循环分别读取两个升序序列,并将它们存储到数组 a 中。
  3. 然后,我们使用冒泡排序算法对数组 a 进行排序,将合并后的序列按照升序排列。
  4. 最后,我们使用一个循环遍历排序后的数组 a,并输出每个元素,从而得到最终的合并后的升序序列。

总结

本题主要考察了数组的基本操作、排序算法以及输入输出的处理。通过这道题的练习,我们可以进一步熟悉 C++ 中数组和排序算法的使用,并提高代码实现能力。

C++算法入门练习题: 合并有序序列

原文地址: https://www.cveoy.top/t/topic/S51 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录