c++实现二分搜索技术
时间: 2023-10-30 10:13:25 浏览: 35
二分搜索技术是一种高效的查找算法,它的基本思想是将查找范围逐步缩小一半,通过比较中间元素和目标元素的大小关系,从而确定目标元素在左半边还是右半边,再继续对应的半边进行查找,直到最终找到目标元素为止。C语言实现二分搜索技术的代码如下:
```
int binary_search(int arr[], int len, int target) {
int left = 0;
int right = len - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] < target) {
left = mid + 1;
} else if (arr[mid] > target) {
right = mid - 1;
} else {
return mid;
}
}
return -1;
}
```
其中,arr代表存储数据的数组,len代表数组的长度,target代表要查找的目标元素。该函数返回目标元素在数组中的下标,如果目标元素不在数组中,则返回-1。在实现二分搜索技术时,需要保证数组是有序的,否则查找结果将不正确。
相关问题
c++实现二分搜索技术问题建模
二分搜索问题建模可以使用数组来存储待搜索的有序序列,然后使用指针指向数组的开始和结束位置。接下来,使用中间值来判断要搜索的元素位于左半部分还是右半部分,逐步缩小搜索范围,并重复该过程,直到找到目标元素或者确定目标元素不存在。在代码实现中,需要考虑边界条件和一些特殊情况,比如数组为空或者目标元素小于最小值或者大于最大值等。
/*3.二分搜索技术(用递归实现),输入长度为n的整数数组及数值x,求数组中 值为x的元素位置.*/
以下是用递归实现二分搜索的示例代码:
```c++
#include <iostream>
using namespace std;
int binarySearch(int arr[], int left, int right, int x)
{
if (right >= left) {
int mid = left + (right - left) / 2;
// 如果找到了目标元素,返回其索引
if (arr[mid] == x)
return mid;
// 如果目标元素比中间元素小,那么在左半边继续搜索
if (arr[mid] > x)
return binarySearch(arr, left, mid - 1, x);
// 如果目标元素比中间元素大,那么在右半边继续搜索
return binarySearch(arr, mid + 1, right, x);
}
// 如果找不到目标元素,返回 -1
return -1;
}
int main()
{
int arr[] = { 2, 3, 4, 10, 40 };
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = binarySearch(arr, 0, n - 1, x);
if (result == -1)
cout << "元素不在数组中" << endl;
else
cout << "元素在数组中的索引为 " << result << endl;
return 0;
}
```
在上面的代码中,`binarySearch` 函数接受一个整数数组 `arr`、左右索引 `left` 和 `right`、以及需要查找的目标元素 `x`。该函数首先计算出中间元素的索引 `mid`,然后判断目标元素是否等于中间元素。如果是,那么直接返回中间元素的索引。如果目标元素比中间元素小,那么在左半边继续搜索。如果目标元素比中间元素大,那么在右半边继续搜索。如果最终找不到目标元素,返回 -1。
在主函数中,我们定义了一个整数数组 `arr`,然后调用 `binarySearch` 函数来查找元素 10 的索引。由于该元素位于数组中,所以输出元素在数组中的索引为 3。