二分查找思路实现

二分查找是一种很常见的查找算法,重要的是边界的处理和循环的起止条件

  1. 使用二分查找的话,首先接收的数组一定是有序的。
  2. 确定边界。在头一次循环中,左边界也就是索引下标为0的位置,右边界是数组的长度-1.
  3. 确定循环起止条件。当左边界 l <= r 右边界时,循环成立。此时的l和r类似于双指针,指向数组的位置。在循环过程中没有找到目标值时,根据目标值和m的大小,再次确定左右边界的选取范围。当中间值 am == target 时,即找到目标值,返回目标值下标m。而当 l > r 时 也就代表着未找到数据,返回 -1;
  4. 注意点:在求m的大小时,可能会出现数据溢出的情况。正常情况 m = (l + r) / 2 向下取整。为了避免数据溢出(当数组长度很大时,并且数据处于数组中的右部分,有可能会出现数据溢出),我们可以使用右移一位的方式(位运算,等价于除以2,前提是正整数)。还可以使用 m = l + (r - l) / 2 ; 的方式避免数据过大造成溢出
  5. 代码如下:
java 复制代码
public static int binarySearch(int[] a, int t) {
        int l = 0, r = a.length - 1, m;
        while (l <= r) {
            m = (l + r) / 2;
            //m = (l + r) >>> 1;
            //m = l + (r - l) / 2;
            if (a[m] == t) {
                return m;
            } else if (a[m] > t) {
                r = m - 1;
            } else {
                l = m + 1;
            }
        }
        return -1;
    }
相关推荐
wewowilling5 分钟前
AI大模型开发--01Python基础(无废话)
开发语言·python·函数
小羊没烦恼!12 分钟前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式
棉猴15 分钟前
玩游戏学Python5-函数
开发语言·python·函数·玩游戏·游戏编程
Rain的Java大神之路16 分钟前
[特殊字符]8年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·数据库·人工智能·后端·python·spring·ai编程
垆边人似月.36 分钟前
华为机试题 :最大数
c++·算法·华为
高级程序源37 分钟前
springboot大学生体测系统72170-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
谢亮_vipxieliang42 分钟前
JavaScript this 指向完全指南:调用位置决定一切
开发语言·javascript·ecmascript
IT研究室44 分钟前
最新计算机毕业设计选题推荐-基于spring boot的文学名著分享系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
denlaku1 小时前
JDK 13 新特性详解
java·开发语言
秋饼1 小时前
Java 后端企业级 LLM 网关实战:Spring Cloud Gateway 构建统一大模型接入层
java·ai·技术分享·后端开发