欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

二分

时间:2024-05-11 14:49 作者:admin 点击:
二分算法,也称为二分搜索算法(Binary Search Algorithm),是一种在有序数组中查找特定元素的高效搜索算法。它的工作原理是将目标值与数组中间元素进行比较,根据比较结果缩小搜索

二分算法,也称为二分搜索算法(Binary Search Algorithm),是一种在有序数组中查找特定元素的高效搜索算法。它的工作原理是将目标值与数组中间元素进行比较,根据比较结果缩小搜索范围,然后重复这个过程,直到找到目标值或搜索范围为空。

二分搜索算法的关键特性包括:

  1. 有序数组:二分搜索算法要求输入的数组必须是有序的(升序或降序)。
  2. 时间复杂度:二分搜索算法的平均和最坏时间复杂度都是 O(log n),其中 n 是数组中元素的数量。
  3. 每次减半:通过每次将搜索区间减半,二分搜索算法可以快速缩小搜索范围。
  4. 迭代或递归实现:二分搜索可以以迭代或递归的方式实现。
  5. 终止条件:算法的终止条件是搜索区间为空(即 left > right)或找到目标值。
  6. 实现简单:二分搜索算法相对简单,易于理解和实现。

下面是一个二分搜索算法的迭代实现示例:

#include <iostream>
#include <vector>

int binarySearch(const std::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; // 未找到目标值,返回-1
}

int main() {
    std::vector<int> nums = {-10, -3, 0, 5, 9, 12, 20, 40, 55, 60};
    int target = 9;
    int result = binarySearch(nums, target);
    if (result != -1) {
        std::cout << "Found " << target << " at index " << result << std::endl;
    } else {
        std::cout << target << " not found in the array." << std::endl;
    }
    return 0;
}

在这个示例中,我们使用迭代方式实现二分搜索算法。算法通过更新 leftright 指针来不断缩小搜索区间,直到找到目标值或搜索区间为空。

二分搜索算法不仅用于查找元素,还可以扩展到其他问题,如查找第一个等于给定值的元素、查找最后一个等于给定值的元素、查找第一个大于或等于给定值的元素等。此外,二分搜索算法的思想也可以应用于其他类型的搜索问题,如在有序矩阵中查找元素等。


(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%