java 二分法详解几种实现方法

发布时间 - 2026-01-10 23:16:43    点击率:

java 二分法详解几种方法

二分查找(java实现)

 二分查找

算法思想:又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。

实现:

 1.非递归代码

public static int biSearch(int []array,int a){
    int lo=0;
    int hi=array.length-1;
    int mid;
    while(lo<=hi){
      mid=(lo+hi)/2;
      if(array[mid]==a){
        return mid+1;
      }else if(array[mid]<a){
        lo=mid+1;
      }else{
        hi=mid-1;
      }
    }
    return -1;
  }

2.递归实现

public static int sort(int []array,int a,int lo,int hi){
    if(lo<=hi){
      int mid=(lo+hi)/2;
      if(a==array[mid]){
        return mid+1;
      }
      else if(a>array[mid]){
        return sort(array,a,mid+1,hi);
      }else{
        return sort(array,a,lo,mid-1);
      }
    }
    return -1;
  }

 时间复杂度为 O(logN)  

 查找第一个元素出现的位置(元素允许重复)

public static int biSearch(int []array,int a){
    int n=array.length;
    int low=0;
    int hi=n-1;
    int mid=0;
    while(low<hi){
      mid=(low+hi)/2;
      if(array[mid]<a){
        low=mid+1;
      }else{
        hi=mid;
      }
    }
    if(array[low]!=a){
      return -1;
    }else{
      return low;
    }
  }

查询元素最后一次出现的位置

public static int biSearch(int []array,int a){
    int n=array.length;
    int low=0;
    int hi=n-1;
    int mid=0;
    while(low<hi){
      mid=(low+hi+1)/2;
      if(array[mid]<=a){
        low=mid;
      }else{
        hi=mid-1;
      }
    }
  
    if(array[low]!=a){
      return -1;
    }else{
      return hi;
    }
  }



感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 二分法  # 二分法几种实现方法  # 关于二分法查找Java的实现及解析  # Java 二分法检索算法代码实现详解  # java实现二分法查找出数组重复数字  # java实现二分法的完整代码  # java 中二分法查找的应用实例  # java 二分法算法的实例  # Java二分法查找_动力节点Java学院整理  # Java实现二分法变种的示例代码  # 递归  # 则在  # 第一个  # 希望能  # 谢谢大家  # 又叫  # 几种方法  # 后半部  # 前半  # pre  # br  # strong  # nbsp  # color  # style  # span  # lt  # return  # length 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网页设计与网站制作内容,怎样注册网站?  微信小程序 scroll-view组件实现列表页实例代码  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  高端企业智能建站程序:SEO优化与响应式模板定制开发  图册素材网站设计制作软件,图册的导出方式有几种?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  韩国服务器如何优化跨境访问实现高效连接?  详解MySQL数据库的安装与密码配置  如何快速打造个性化非模板自助建站?  Laravel如何配置任务调度?(Cron Job示例)  智能起名网站制作软件有哪些,制作logo的软件?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Mybatis 中的insertOrUpdate操作  🚀拖拽式CMS建站能否实现高效与个性化并存?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  JavaScript如何操作视频_媒体API怎么控制播放  Laravel如何实现数据库事务?(DB Facade示例)  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  如何用wdcp快速搭建高效网站?  如何用VPS主机快速搭建个人网站?  高端建站如何打造兼具美学与转化的品牌官网?  JS实现鼠标移上去显示图片或微信二维码  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  实例解析Array和String方法  如何在阿里云部署织梦网站?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  高端网站建设与定制开发一站式解决方案 中企动力  Bootstrap CSS布局之列表  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  JS去除重复并统计数量的实现方法  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  JavaScript模板引擎Template.js使用详解  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  如何在IIS中新建站点并解决端口绑定冲突?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  如何在 React 中条件性地遍历数组并渲染元素  如何在阿里云服务器自主搭建网站?  EditPlus中的正则表达式实战(6)  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  网站图片在线制作软件,怎么在图片上做链接?