用c++编写算法实现二分检索
时间: 2023-08-04 18:12:31 浏览: 45
二分查找(Binary Search),也称折半查找,是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
C++实现代码如下:
```c++
#include <iostream>
using namespace std;
// 二分查找算法
int binarySearch(int arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
// 没有找到目标元素,返回-1
return -1;
}
int main() {
int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 7;
int index = binarySearch(arr, 0, n - 1, target);
if (index != -1) {
cout << "目标元素 " << target << " 在数组中的下标是 " << index << endl;
} else {
cout << "目标元素 " << target << " 不在数组中" << endl;
}
return 0;
}
```
上述代码中,`binarySearch` 函数使用迭代的方式实现了二分查找算法,其中参数 `arr` 表示要进行查找的数组,`left` 表示数组的左边界,`right` 表示数组的右边界,`target` 表示要查找的目标元素。
在函数体中,首先使用 while 循环不断地比较数组中间位置的元素和目标元素的大小关系,然后根据比较结果将搜索范围缩小到数组的左半部分或右半部分,直到最终定位到目标元素或者搜索范围为空时退出循环。如果找到目标元素,就返回其在数组中的下标;否则返回 -1 表示目标元素不在数组中。
在主函数中,我们定义了一个数组 `arr`,然后调用 `binarySearch` 函数查找数组中是否包含目标元素,最后根据查找结果输出相应的提示信息。