思路:
- 确定查找范围:开始时,将整个有序数组作为查找范围。
- 比较中间元素:计算查找范围的中间元素的索引
mid
,并将其与目标值进行比较。- 如果中间元素等于目标值,则查找成功,返回中间元素的索引。
- 如果中间元素大于目标值,则在左半部分继续查找,将查找范围缩小为左半部分。
- 如果中间元素小于目标值,则在右半部分继续查找,将查找范围缩小为右半部分。
- 递归查找:根据比较结果,选择在左半部分或右半部分继续进行折半查找,直到找到目标值或查找范围为空。
- 查找结果:如果找到目标值,返回其索引;否则返回一个表示未找到的标识(如-1)。
注意:二分查找的数组是有序的数组
代码:
#include <iostream>
using namespace std;// 递归实现折半查找
int binarySearch(int arr[], int left, int right, int target) {if (left >= right) {return -1;}int mid = (left + right) / 2;// 如果目标值与中间元素相等,则返回中间元素的索引if (arr[mid] == target) {return mid;}// 如果目标值小于中间元素,则在左半部分继续查找if (arr[mid] > target) {return binarySearch(arr, left, mid - 1, target);}// 否则,在右半部分继续查找return binarySearch(arr, mid + 1, right, target);// 如果未找到目标值,返回-1表示未找到}int main() {int arr[] = { 2, 3, 4, 10, 40 };int n = sizeof(arr) / sizeof(arr[0]);int target;cin >> target;int result = binarySearch(arr, 0, n - 1, target);cout << "目标值在索引 " << result << " 处找到";return 0;
}