用折半查找法查找给定值a和b之间的所有元素并输出的c++代码
时间: 2024-12-10 10:50:10 浏览: 8
折半查找举例-东南大学C++总课件
在C++中,你可以使用折半查找算法(也称二分查找)来找到数组中的某个特定范围,但该算法通常用于在一个已排序的数组中查找单个元素。如果你想找出数组中所有在a和b范围内的元素,可以稍微修改一下思路,遍历整个数组。这里是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
// 假设 arr 是一个按升序排列的整数向量
std::vector<int> a_and_b_range(const std::vector<int>& arr, int a, int b) {
std::vector<int> result;
int low = 0;
int high = arr.size() - 1;
// 遍历整个数组,检查每个元素是否在指定范围内
while (low <= high) {
int mid = low + (high - low) / 2; // 折半查找位置
if (arr[mid] >= a && arr[mid] <= b) {
result.push_back(arr[mid]); // 如果在范围内,添加到结果
// 如果右半部分还可能有,继续查找
if (mid + 1 < high && arr[mid + 1] > b)
high = mid - 1;
else
low = mid + 1;
}
else if (arr[mid] < a)
low = mid + 1; // 否则,如果小于a,移向右半部分
else
high = mid - 1; // 否则,如果大于b,移向左半部分
}
return result;
}
int main() {
std::vector<int> input = {1, 3, 5, 7, 9, 11, 13, 15};
int a = 3;
int b = 11;
std::vector<int> range_result = a_and_b_range(input, a, b);
for (int num : range_result)
std::cout << num << " ";
std::cout << "\n";
return 0;
}
```
阅读全文