📜  二进制搜索 c++ (1)

📅  最后修改于: 2023-12-03 15:21:40.790000             🧑  作者: Mango

二分查找 Binary Search

二分查找,也称折半查找,是一种效率较高的查找算法。但是前提条件是数据必须有序,对于静态数据集合相对适用。

算法流程
  1. 将待查找区间的中点mid找出来。
  2. 如果a[mid]=x,则找到x,算法终止。
  3. 如果a[mid]>x,则对左区间再次执行步骤1。
  4. 如果a[mid]<x,则对右区间再次执行步骤1。
  5. 如果左右区间相等无论如何找不到x,则x不存在于数组中。
代码实现

C++实现:

int binarySearch(vector<int>& nums, int target) {
    int left = 0, right = nums.size() - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) return mid;
        else if (nums[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}

Python实现:

def binary_search(nums: List[int], target: int) -> int:
    left, right = 0, len(nums) - 1
    while left <= right:
        mid = left + (right - left) // 2
        if nums[mid] == target:
            return mid
        elif nums[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1
时间复杂度

每经过一次比较,查找区间就会减半,因此二分查找的时间复杂度为O(log n)。

注意事项
  • 需要注意边界问题,例如nums.size() - 1;
  • 注意使用left + (right - left) / 2而不是(left + right) / 2来避免整型溢出。

参考资料:维基百科