用C++编写一个有序数组类,类定义为SortedArray,要求对两个任意长度的数组分别进行排序,之后再将这两个有序数组合并,用cin>>sa这种方式输入一个数组,分两行输入,第一行输入数组长度,第二行输入数组元素,中间用空格分隔
时间: 2024-05-05 22:15:40 浏览: 132
以下是我写的代码,使用了归并排序的思想来合并两个有序数组:
```c
#include <iostream>
#include <vector>
using namespace std;
class SortedArray {
private:
vector<int> arr;
// 归并排序合并两个有序数组的函数
vector<int> merge(vector<int>& a, vector<int>& b) {
int n = a.size(), m = b.size();
int i = 0, j = 0;
vector<int> res;
while (i < n && j < m) {
if (a[i] < b[j]) {
res.push_back(a[i++]);
} else {
res.push_back(b[j++]);
}
}
while (i < n) {
res.push_back(a[i++]);
}
while (j < m) {
res.push_back(b[j++]);
}
return res;
}
public:
SortedArray() {}
// 从 cin 中读入一个有序数组
friend istream& operator>>(istream& is, SortedArray& sa) {
int n;
is >> n;
sa.arr.resize(n);
for (int i = 0; i < n; ++i) {
is >> sa.arr[i];
}
return is;
}
// 对数组进行排序
void sort() {
std::sort(arr.begin(), arr.end());
}
// 合并两个有序数组
SortedArray merge(SortedArray& other) {
vector<int> a = arr, b = other.arr;
vector<int> res = merge(a, b);
SortedArray sa;
sa.arr = res;
return sa;
}
// 输出数组
friend ostream& operator<<(ostream& os, const SortedArray& sa) {
for (int x : sa.arr) {
os << x << " ";
}
return os;
}
};
int main() {
SortedArray a, b;
cin >> a >> b;
a.sort();
b.sort();
SortedArray c = a.merge(b);
cout << c << endl;
return 0;
}
```
使用示例:
输入:
```
5
1 3 5 7 9
4
2 4 6 8
```
输出:
```
1 2 3 4 5 6 7 8 9
```
阅读全文