已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。 原来排序的规律分有顺序和逆序。 输入 第一行,原始数列。第二行,需要插入的数字。 输出 排序后的数列C++
时间: 2023-11-29 17:26:19 浏览: 71
可以使用二分查找的方法来找到插入位置,然后将新数字插入数组中,最后按照原来的排序规律重新排序数组即可。下面是C++的实现代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// 读入原始数列和需要插入的数字
vector<int> nums;
int n;
while (cin >> n) {
nums.push_back(n);
}
int insert_num;
cin >> insert_num;
// 二分查找插入位置
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == insert_num) {
nums.insert(nums.begin() + mid, insert_num);
break;
} else if (nums[mid] < insert_num) {
left = mid + 1;
} else {
right = mid - 1;
}
}
if (left > right) {
nums.insert(nums.begin() + left, insert_num);
}
// 重新排序数组
bool is_sorted = true;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] < nums[i - 1]) {
is_sorted = false;
break;
}
}
if (!is_sorted) {
// 如果原来是逆序,就反转数组
if (nums[0] > nums[nums.size() - 1]) {
reverse(nums.begin(), nums.end());
} else {
sort(nums.begin(), nums.end());
}
}
// 输出排序后的数列
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}
cout << endl;
return 0;
}
```
注意:上述代码假设原始数列是有序的,如果原来是逆序,就需要先对数组进行反转,然后再用sort函数排序。
阅读全文