二分法查找c++ 左右
时间: 2024-08-09 16:01:05 浏览: 89
二分法查找是一种高效搜索算法,它通过将有序数组分成两半来进行查找操作。以下是基本步骤:
1. **初始化**:首先确定整个数组的范围,通常初始时左右指针分别指向数组的第一个元素(左边界)和最后一个元素(右边界)。
2. **找到中间点**:计算数组的中间索引 `mid`,可以通过 `(left + right) / 2` 来计算。为了防止整数溢出,在实际编码时推荐使用 `left + (right - left) / 2` 或者 `left + ((right - left) >> 1)` 这样的写法。
3. **比较目标值与中间值**:
- 如果中间值等于目标值,则找到了目标位置并返回结果。
- 如果中间值小于目标值,则更新左边界为 `mid + 1` ,因为目标值存在于右半部分。
- 如果中间值大于目标值,则更新右边界为 `mid - 1` ,因为目标值存在于左半部分。
4. **循环条件**:只要左边界小于或等于右边界,就继续执行上述步骤;如果左边界超过了右边界,则说明查找失败,并返回未找到的结果(通常是 `-1`、`false` 等标志值表示未找到)。
下面是一个简单的 C++ 实现示例:
```cpp
#include <iostream>
using namespace std;
int binarySearch(int arr[], int l, int r, int x)
{
while (l <= r)
{
int m = l + (r - l) / 2;
// Check if x is present at mid
if (arr[m] == x)
return m;
// If x greater, ignore left half
if (arr[m] < x)
l = m + 1;
// If x is smaller, ignore right half
else
r = m - 1;
}
// If we reach here, then element was not present
return -1;
}
int main()
{
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr)/sizeof(arr);
int x = 10;
int result = binarySearch(arr, 0, n-1, x);
(result == -1) ? cout << "Element is not present in array"
: cout << "Element is present at index " << result;
return 0;
}
```
这个例子展示了如何在数组中查找特定元素的过程,实现了从数组两端缩小查找范围直至找到元素或确认不存在的过程。理解并掌握二分查找的基本原理对于优化算法效率非常关键。
---
阅读全文