二分查找算法定义:二分查找(binary search),也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半:

下面是动态实现图:

二分查找算法

直接上代码:

二分查找代码实现

可以看到递归和非递归都能实现。在网络上也有人随便就写了这样一段代码如下图:

有隐患的二分查找代码

注意:可以看到 mid=(lo+h1)/2 计算中间值的时候 这样计算是有一定的风险的。

建议这样计算:mid = low + (high – low)/2 可以准确计算出中间值

使用二分查找要求:数组+有序 +不重复 。

虽然高效但是我们有些情况数组不是有序,所有构建有序数组变成低效的事情。

java 二分查找_JAVA 实现二分查找算法。我知道你会,但没你想象的那么简单相关推荐

  1. java 加密工具包_Java加密和解密算法调用工具包

    软件架构及说明 1.本工具包基于纯java编写而成: 2.部分算法密钥对基于bcprov-jdk16的调用生成. 3.部分加密与解密算法来自网上公开的源码,并在此基础上进行整理和优化而来: 4.本加密 ...

  2. java二分法查找_java实现二分法查找

    什么是二分法查找: 二分法也就是折半查找,在有序的数列中查找指定的元素,设定最小索引(low)和最大索引(height-1)还有中间值mid((low+height-1)/2),这种查找,如果中间值比 ...

  3. java二分法查找_java 中二分法查找的应用实例

    java 中二分法查找的应用实例 二分查找的前提是:数组有序 注意:mid的动态变化,否则出错!!! 实例代码: public class BiSearch { public static void ...

  4. java特殊类型_java中如何查找某个特定类型作为形参的方法

    import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; im ...

  5. java实现文本查找_Java实现目录查找与文本阅读

    Java实现目录查找与文本阅读 1.实现文本阅读 package AllAboutFile; /** * * @author lucifer */ import java.awt.*; import ...

  6. java 重复对象_Java根据条件查找重复项并覆盖/更新重复对象

    我有一个包含以下示例数据的电子表格. 在Java中,使用jxl,我将数据读入名为MergeObject.java的自定义对象中.此类是一个简单的POJO,其中包含电子表格中标题的列映射.阅读完电子表格 ...

  7. java 音色识别_Java实现Shazam声音识别算法的实例代码

    Shazam算法采用傅里叶变换将时域信号转换为频域信号,并获得音频指纹,最后匹配指纹契合度来识别音频. 1.AudioSystem获取音频 奈奎斯特-香农采样定理告诉我们,为了能捕获人类能听到的声音频 ...

  8. java 下载限速_Java 文件下载限流算法

    在做文件下载功能时,为了避免下载功能将服务器的带宽打满,从而影响服务器的其他服务.我们可以设计一个限流器来限制下载的速率,从而限制下载服务所占用的带宽. 一.算法思路 定义一个数据块chunk(单位 ...

  9. java实现分而治之_java中的分而治之算法

    我必須用Java編寫一個使用分治法的 算法.給定一個數組V,其中n個int元素 該算法應該計算兩個連續出現的次數.java中的分而治之算法 例如:如果V = [3, 0, 0, 1, 0, 1, 3, ...

最新文章

  1. 如何检查linux系统的负载高低
  2. Linux(DeepInOS) 下 mysql 的安装与基本配置
  3. 二维数组的查找 java_二维数组中的查找
  4. MZOJ 1134: 二叉苹果树
  5. SAP CRM 产品主数据和附件(Attachment)的模型关系
  6. [译] Airbnb 在 React Native 上下的赌注(一):概述
  7. tensorflow分类的loss函数_tensorflow 分类损失函数使用小记
  8. Vue-cli项目中路由的基础用法,以及路由嵌套
  9. 【优先队列】HDU 1873——看病找医生
  10. Linux运维问题解决(4)——linux LVM技术 逻辑卷增加 扩容 缩小 删除等操作
  11. C++11 实现线程池
  12. Html页面增加返回顶部图标和隐藏出现
  13. Python之计算机算法基础总结(借鉴、整理)、排序算法、查找算法
  14. 医疗数据之医院管理型数据仓库解决方案
  15. 8. 求 s=a+aa+aaa+aaaa+aa…a 的值
  16. 关于防止出现手机微信投票怎么刷票、微信刷票会不会被发现的技术
  17. iPhone转Android体验,一直用苹果手机,突然换成安卓是什么体验?网友:差距太大!...
  18. docker mysql:5.6镜像安装mysqlreport、pt-query-digest
  19. IEEE Transactions on Intelligent Transportation Systems投稿经验分享
  20. 产品经理:想爱没那么简单

热门文章

  1. java中HashSet对象内的元素的hashCode值不能变化
  2. java通过jdbc访问mysql,update数据返回值的思考
  3. Bytom的链式交易和花费未确认的交易
  4. (转载)C中实参与形参的“值传递”只能“单向传送”(透彻的理解)
  5. sqlilabs 5
  6. 计算机中字符编码换算
  7. SQL优化:化解表关联的多对多join
  8. PowerShell 笔记
  9. vs2012 vc++控制台程序 配置成64位
  10. 为Hyper-V上的Redhat Linux 打上集成服务