c++用折半查找法查找给定值a和b之间的所有元素
时间: 2024-12-18 21:33:12 浏览: 0
折半查找(C++语言编写的)
折半查找法,也称为二分查找,通常适用于已排序数组或列表。在C++中,如果你有一个从小到大排列的范围 `[a, b]`,并且你想找到这个范围内所有的整数,你可以创建一个循环,从 `a` 开始,每次将搜索区间缩小一半,直到搜索结束。
以下是简单的步骤:
1. 定义两个指针,`low` 和 `high`,初始时分别是 `a` 和 `b` 的值。
2. 创建一个 while 循环,条件是 `low <= high`。
3. 计算中间位置 `mid`:`mid = (low + high) / 2`。注意这里需要取整,因为数组索引通常是整数。
4. 检查 `mid` 是否等于你要找的元素。如果相等,打印并更新 `high` 为 `mid - 1`,以便继续查找下一个更小的元素;如果 `mid` 大于你要找的元素,则更新 `high` 为 `mid - 1`;反之,如果 `mid` 小于你要找的元素,更新 `low` 为 `mid + 1`。
5. 当 `low > high` 时,说明已经遍历完搜索区间,跳出循环。
下面是一个示例函数实现:
```cpp
void binary_search_range(int a, int b, const std::vector<int>& sorted_list, int target) {
low = 0;
high = b;
while (low <= high) {
int mid = low + (high - low) / 2;
if (sorted_list[mid] == target) {
// 找到了目标元素,打印并移动高位指针
std::cout << "Found " << target << " at index " << mid << std::endl;
high = mid - 1; // 查找更小的元素
} else if (sorted_list[mid] < target) {
low = mid + 1; // 目标大于当前元素,向右半部分查找
} else {
high = mid - 1; // 目标小于当前元素,向左半部分查找
}
}
}
```
阅读全文