c++二分算法

二分算法(Binary Search)是一种在有序数组中查找特定元素的算法。它的基本思想是将待查找的区间一分为二,然后判断目标元素在左半区间还是右半区间中,依次缩小查找范围,直到找到目标元素或者确定目标元素不存在。

二分算法可以用递归或循环的方式实现,下面分别介绍这两种方式的实现。

  1. 递归实现:
int binarySearchRecursive(int arr[], int target, int left, int right) {
    if (left > right) { // 如果左边界大于右边界,说明目标元素不存在
        return -1;
    }
    
    int mid = left + (right - left) / 2; // 计算中间位置
    
    if (arr[mid] == target) { // 找到目标元素
        return mid;
    } else if (arr[mid] > target) { // 目标元素在左半区间
        return binarySearchRecursive(arr, target, left, mid - 1);
    } else { // 目标元素在右半区间
        return binarySearchRecursive(arr, target, mid + 1, right);
    }
}

  1. 循环实现:
int binarySearchIterative(int arr[], int target, int left, int right) {
    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;
        }
    }
    
    return -1; // 目标元素不存在
}

以上代码中,arr是待查找的有序数组,target是目标元素,leftright分别表示查找范围的左边界和右边界。两种实现方式的时间复杂度均为O(log n),其中n是数组的大小。

需要注意的是,二分算法只适用于有序数组,如果数组无序,需要先进行排序。另外,二分算法还有一些变种,比如二分查找第一个等于目标元素的位置、二分查找最后一个等于目标元素的位置、二分查找第一个大于等于目标元素的位置、二分查找最后一个小于等于目标元素的位置等。

相关推荐

  1. C++ 算法——二分查找

    2024-07-13 01:04:05       20 阅读
  2. c++二分算法

    2024-07-13 01:04:05       21 阅读
  3. 简单二分查找(C++算法

    2024-07-13 01:04:05       60 阅读
  4. 突破编程_C++_查找算法二分查找)

    2024-07-13 01:04:05       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 01:04:05       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 01:04:05       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 01:04:05       62 阅读
  4. Python语言-面向对象

    2024-07-13 01:04:05       72 阅读

热门阅读

  1. try catch 解决大问题

    2024-07-13 01:04:05       22 阅读
  2. [C++]多态

    2024-07-13 01:04:05       25 阅读
  3. [Python学习篇] Python Socket网络编程

    2024-07-13 01:04:05       26 阅读
  4. 洛谷 P1506 拯救 oibh 总部

    2024-07-13 01:04:05       23 阅读
  5. 「AIGC」TDSQL技术详解

    2024-07-13 01:04:05       20 阅读
  6. Ultralytics YoloV8库可完成任务介绍

    2024-07-13 01:04:05       27 阅读
  7. Oracle 19c RAC 心跳异常处理

    2024-07-13 01:04:05       19 阅读
  8. 音频demo:将PCM数据和opus格式相互编解码

    2024-07-13 01:04:05       30 阅读
  9. 算术运算符. 二

    2024-07-13 01:04:05       28 阅读
  10. matlab实现pid控制机械系统

    2024-07-13 01:04:05       18 阅读