c++实现二分查找接受一个有序数组和要查找的元素,如果指定元素包含在数组中 最终返回其位置,基础部分:查找范围为空 返回-1,如果中间位置的值是查找的值 返回中间位置,否则缩小查找范围,调用递归函数
时间: 2024-10-19 17:14:48 浏览: 32
在C++中,二分查找(Binary Search)是一种高效的搜索算法,它适用于有序数组。基本的步骤如下:
```cpp
#include <iostream>
// 定义二分查找函数
int binarySearch(int arr[], int left, int right, int target) {
// 确保左指针小于等于右指针
if (left <= right) {
// 计算中间位置
int mid = left + (right - left) / 2;
// 检查中间元素是否为目标元素
if (arr[mid] == target) {
return mid; // 目标元素找到,返回中间位置
}
// 如果目标元素大于中间元素,说明应在右半部分继续查找
else if (arr[mid] < target) {
return binarySearch(arr, mid + 1, right, target); // 递归调用左移
}
// 否则,在左半部分查找
else {
return binarySearch(arr, left, mid - 1, target); // 递归调用右移
}
}
// 查找范围为空,表示目标元素不在数组中
return -1;
}
// 测试函数
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int result = binarySearch(arr, 0, n - 1, target);
if (result != -1)
std::cout << "Element found at index: " << result << std::endl;
else
std::cout << "Element not found in the array" << std::endl;
return 0;
}
```
在这个例子中,`binarySearch` 函数接收一个有序整数数组 `arr`、左右边界 `left` 和 `right`,以及要查找的目标值 `target`。函数首先检查中间元素,然后根据比较结果递归地调整查找范围,直到找到目标或查找范围为空。
阅读全文