上述问题增加一个要求:只能对A数组排序,不能对B数组排序,请重新用C++实现
时间: 2023-06-14 20:05:19 浏览: 87
好的,那么我们可以使用C++的STL库中的sort函数来对A数组进行排序,然后再根据A数组中元素在原数组B中的位置来进行重新构建B数组。具体代码如下:
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> A(n), B(n);
for (int i = 0; i < n; i++) {
cin >> A[i];
B[i] = i; // 初始化B数组
}
sort(A.begin(), A.end()); // 对A数组排序
for (int i = 0; i < n; i++) {
int index = lower_bound(A.begin(), A.end(), A[i]) - A.begin(); // 获取A[i]在排序后A数组中的位置
B[index] = i; // 根据位置重新构建B数组
}
for (int i = 0; i < n; i++) {
cout << B[i] << " ";
}
cout << endl;
return 0;
}
```
首先我们使用vector定义了两个数组A和B,并且初始化B数组为0~n-1。然后我们对A数组进行排序,接着遍历A数组中的每一个元素,使用STL库中的lower_bound函数获取该元素在排序后A数组中的位置,然后将B数组中该位置的值赋为该元素在原数组B中的位置。最后遍历B数组输出即可。需要注意的是,这里我们使用了STL库中的lower_bound函数来进行二分查找,这里的时间复杂度为O(logn),总的时间复杂度为O(nlogn)。
阅读全文