c++二分查找

二分查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它的工作原理是将待搜索的区间分成两半,判断目标值是在左半部分还是右半部分,然后继续在相应的半区内进行查找,直到找到目标值或搜索区间被缩小为0。二分查找的时间复杂度为O(log n),其中n是数组中的元素数量,这使得它成为在有序数组中查找元素的非常高效的算法。

算法步骤

  1. 初始化:设置两个指针(或索引),low指向数组的第一个元素,high指向数组的最后一个元素。

  2. 循环条件:当low小于等于high时,执行循环。

  3. 计算中点:通过(low + high) / 2(或使用位运算low + (high - low) / 2来避免溢出)计算中点mid

  4. 比较中点与目标值

    • 如果arr[mid]等于目标值,则查找成功,返回mid
    • 如果arr[mid]小于目标值,则说明目标值在mid的右侧,更新low = mid + 1
    • 如果arr[mid]大于目标值,则说明目标值在mid的左侧,更新high = mid - 1
  5. 循环结束:如果循环结束仍未找到目标值,则说明目标值不在数组中,返回未找到的消息或特定值(如-1)。

#include <iostream>  
#include <vector>  
using namespace std;  
  
// 二分查找函数  
int binarySearch(const vector<int>& arr, int target) {  
    int low = 0, high = arr.size() - 1;  
      
    while (low <= high) {  
        int mid = low + (high - low) / 2; // 防止溢出的中点计算  
          
        if (arr[mid] == target) {  
            return mid; // 找到目标值,返回索引  
        } else if (arr[mid] < target) {  
            low = mid + 1; // 调整搜索区间到右半部分  
        } else {  
            high = mid - 1; // 调整搜索区间到左半部分  
        }  
    }  
      
    return -1; // 未找到目标值  
}  
  
int main() {  
    vector<int> arr = {2, 3, 4, 10, 40}; // 示例有序数组  
    int target = 10; // 我们要查找的目标值  
      
    int result = binarySearch(arr, target); // 调用二分查找函数  
      
    if (result != -1) {  
        cout << "Element found at index: " << result << endl;  
    } else {  
        cout << "Element not found" << endl;  
    }  
      
    return 0;  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值