用c++实现输入两组数据并采用顺序表存放有序表的二路归并算法实现从高到低排序
时间: 2024-09-15 07:07:25 浏览: 83
在C++中,你可以使用`vector`作为顺序表来实现二路归并排序。这里是一个基本的步骤:
1. 定义两个`vector<int>`分别存储输入的第一组和第二组数据。
```cpp
#include <iostream>
#include <vector>
std::vector<int> leftList;
std::vector<int> rightList;
// 函数用来合并两个已经排好序的列表
void merge(std::vector<int>& result, std::vector<int>& left, std::vector<int>& right) {
int i = 0, j = 0, k = 0;
while (i < left.size() && j < right.size()) {
if (left[i] > right[j]) {
result[k++] = left[i++];
} else {
result[k++] = right[j++];
}
}
// 把剩余部分添加到结果
while (i < left.size()) {
result[k++] = left[i++];
}
while (j < right.size()) {
result[k++] = right[j++];
}
}
```
2. 主函数里读取输入,并将数据分配给左右两个列表。然后递归地合并它们直到只有一个列表。
```cpp
int main() {
// 读取输入并放入对应的列表
for (int data; std::cin >> data;) {
leftList.push_back(data);
if (leftList.size() == 2 || rightList.empty()) { // 当左右列表之一有2个元素,就准备合并
merge(rightList, leftList, {});
leftList.clear();
}
}
// 如果还有数据在leftList中,最后再合并一次
if (!leftList.empty()) {
merge(rightList, leftList, {});
}
// 结果存储在rightList中,它现在已经是按降序排列
for (const auto& num : rightList) {
std::cout << num << " ";
}
return 0;
}
```
阅读全文