设 a[o:n-1]是已排好序的数组。请改写二分搜索算法,使得当搜索元素不在数组中时,返回小于的最大元素位置 和大于 的最小元素位置。当搜索元素在数组中时,i和,相同,均为在数组中的位置。用C++写
时间: 2024-02-23 18:01:59 浏览: 34
设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j
好的,以下是 C++ 版本的修改后的二分搜索算法:
```c++
#include <iostream>
#include <vector>
using namespace std;
pair<int, int> binary_search(vector<int>& a, int x) {
int lo = 0, hi = a.size() - 1;
int low_max = -1, high_min = -1;
while (lo <= hi) {
int mid = (lo + hi) / 2;
if (a[mid] == x) {
return make_pair(mid, mid);
} else if (a[mid] < x) {
low_max = mid;
lo = mid + 1;
} else {
high_min = mid;
hi = mid - 1;
}
}
if (low_max != -1 && high_min != -1) {
return make_pair(low_max, high_min);
} else if (low_max != -1) {
return make_pair(low_max, a.size());
} else if (high_min != -1) {
return make_pair(0, high_min);
} else {
return make_pair(-1, -1);
}
}
int main() {
vector<int> a = {1, 3, 5, 7, 9, 11};
int x = 6;
pair<int, int> res = binary_search(a, x);
cout << res.first << " " << res.second << endl;
return 0;
}
```
这个算法使用了 STL 中的 `pair` 类型,用来返回两个整数值。
阅读全文