Description 给定两个非递减排列的线性表,将其合并成为一个非递减排列的线性表。 Input 输入数据包括4行: 第一行是正整数N1 (1 <= N1 <= 100000),表示第一个线性表的长度。 第二行是N1个整数,表示第一个线性表的所有元素。 第三行是正整数N2(1 <= N2 <= 100000),表示第二个线性表的长度。 第四行是N2个整数,表示第二个线性表的所有元素。 Output 输出合并之后的线性表,各元素之间以一个空格分开。
时间: 2023-05-17 15:04:35 浏览: 90
可以使用归并排序的思想,将两个非递减排列的线性表合并成一个非递减排列的线性表。具体实现如下:
1. 定义两个指针i和j,分别指向第一个线性表和第二个线性表的起始位置。
2. 定义一个新的线性表result,用于存放合并后的结果。
3. 循环比较i和j指向的元素大小,将较小的元素加入result中,并将指针向后移动一位。
4. 当其中一个线性表的元素全部加入result中后,将另一个线性表剩余的元素全部加入result中。
5. 输出result中的所有元素,各元素之间以一个空格分开。
以下是代码实现:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n1, n2;
cin >> n1;
vector<int> a(n1);
for (int i = 0; i < n1; i++) {
cin >> a[i];
}
cin >> n2;
vector<int> b(n2);
for (int i = 0; i < n2; i++) {
cin >> b[i];
}
vector<int> result;
int i = 0, j = 0;
while (i < n1 && j < n2) {
if (a[i] <= b[j]) {
result.push_back(a[i]);
i++;
} else {
result.push_back(b[j]);
j++;
}
}
while (i < n1) {
result.push_back(a[i]);
i++;
}
while (j < n2) {
result.push_back(b[j]);
j++;
}
for (int i = 0; i < result.size(); i++) {
cout << result[i] << " ";
}
cout << endl;
return 0;
}
阅读全文