c++利用递归和分治策略,对有序数组进行二分搜索
时间: 2024-11-27 18:08:15 浏览: 21
在C++中,二分查找(Binary Search)是一种常见的搜索算法,它适用于已经排序的数组。当使用递归和分治策略时,二分查找可以分为以下步骤:
1. **定义基本情况**:如果数组为空或只有一个元素,那么直接返回索引(如果目标值等于该元素),或者返回-1表示未找到。
```cpp
bool search(vector<int>& nums, int target, int left = 0, int right = nums.size() - 1) {
if (left > right)
return false;
}
```
2. **分割数组**:计算中间索引`mid`,并将数组分为两半。对于递归部分,我们关注左半边(`left`到`mid-1`)和右半边(`mid+1`到`right`)。
```cpp
int mid = left + (right - left) / 2;
```
3. **比较目标值**:比较中间元素`nums[mid]`与目标值`target`。如果相等,返回`mid`;若目标值小于中间值,则在左半边继续搜索;若大于,搜索右半边。
```cpp
if (nums[mid] == target)
return mid;
else if (nums[mid] > target)
return search(nums, target, left, mid - 1);
else
return search(nums, target, mid + 1, right);
```
4. **递归结束条件**:当满足基本情况时,停止递归并返回结果。
这就是C++中通过递归和分治思想实现的二分查找。注意,这种方法效率非常高,时间复杂度为O(log n)。
阅读全文