【基础算法】二分查找

举报
幼儿园老大* 发表于 2024/10/29 21:27:49 2024/10/29
【摘要】 一、二分查找的定义二分查找(Binary Search)也称为折半查找,是一种在有序数组中查找特定元素的高效算法。它通过不断将搜索区间减半,重复缩小搜索范围,直到找到目标元素或者确定目标元素不存在。二、二分查找的基本思想首先,确定一个有序数组的中间位置。将目标元素与中间位置的元素进行比较:如果目标元素等于中间元素,查找成功,返回中间位置的索引。如果目标元素小于中间元素,说明目标元素在中间元素...
一、二分查找的定义


二分查找(Binary Search)也称为折半查找,是一种在有序数组中查找特定元素的高效算法。它通过不断将搜索区间减半,重复缩小搜索范围,直到找到目标元素或者确定目标元素不存在。


二、二分查找的基本思想


  1. 首先,确定一个有序数组的中间位置。
  2. 将目标元素与中间位置的元素进行比较:
    • 如果目标元素等于中间元素,查找成功,返回中间位置的索引。
    • 如果目标元素小于中间元素,说明目标元素在中间元素的左侧,将搜索区间缩小到数组的左半部分,继续在左半部分进行二分查找。
    • 如果目标元素大于中间元素,说明目标元素在中间元素的右侧,将搜索区间缩小到数组的右半部分,继续在右半部分进行二分查找。
  3. 重复上述步骤,直到找到目标元素或者确定目标元素不存在。


三、二分查找的时间复杂度


二分查找的时间复杂度为 O (log n),其中 n 是数组的长度。这是因为每次查找都将搜索区间减半,所以查找的次数与数组长度的对数成正比。


四、二分查找的代码实现


以下是用 Java 实现二分查找的代码示例:
public class BinarySearch {
    public static int binarySearch(int[] arr, int target) {
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (arr[mid] == target) {
                return mid;
            } else if (arr[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;
    }
}
五、二分查找的应用场景


  1. 在有序数组中查找特定元素:这是二分查找最常见的应用场景。例如,在一个已排序的整数数组中查找特定的整数。
  2. 查找满足特定条件的元素位置:例如,在一个已排序的数组中查找第一个大于等于给定值的元素位置,或者查找最后一个小于等于给定值的元素位置。
  3. 解决一些数学问题:例如,求解方程的根、查找满足特定条件的区间等。


六、二分查找的注意事项


  1. 数组必须是有序的:二分查找只适用于有序数组,如果数组无序,需要先进行排序。
  2. 边界条件处理:在实现二分查找时,需要正确处理边界条件,特别是当搜索区间为空时(即 left > right),应该返回特定的值表示查找失败。
  3. 避免整数溢出:在计算中间位置时,应该使用 left + (right - left) / 2 的方式,而不是 (left + right) / 2,以避免在处理大数组时可能出现的整数溢出问题。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。