用c++实现二分搜索递归处理,各分支结束与二分搜索结束尽量的融合
时间: 2023-05-28 09:07:44 浏览: 45
以下是用 C 语言实现的递归二分搜索代码:
```c
#include <stdio.h>
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; // 找到目标元素
}
else if (arr[mid] > target) {
return binarySearch(arr, left, mid - 1, target); // 在左侧递归查找
}
else {
return binarySearch(arr, mid + 1, right, target); // 在右侧递归查找
}
}
int main()
{
int arr[] = {1, 3, 5, 7, 9, 11};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 5;
int index = binarySearch(arr, 0, n - 1, target);
if (index != -1) {
printf("目标元素 %d 在数组中的下标为 %d\n", target, index);
}
else {
printf("目标元素 %d 不在数组中\n", target);
}
return 0;
}
```
代码中的 `binarySearch` 函数实现了递归的二分查找算法,参数 `arr` 是待查找的有序数组,`left` 和 `right` 分别表示当前查找区间的左右边界,`target` 是目标元素。函数首先计算出当前区间的中间位置 `mid`,如果中间元素等于目标元素,则直接返回中间位置。如果中间元素大于目标元素,则在左侧递归查找;如果中间元素小于目标元素,则在右侧递归查找。如果左右边界相遇时仍然没有找到目标元素,则返回 -1。
在 `main` 函数中,我们定义了一个有序数组 `arr`,并调用 `binarySearch` 函数在其中查找元素 `target` 的下标。如果返回的下标不为 -1,则表示找到了目标元素,否则表示目标元素不存在于数组中。