java算法之二分查找法的实例详解

原理

假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1。通过数组长度可取出中间位置元素的索引,将其值与目标值比较,如果中间位置元素值大于目标值,则在左部分进行查找,如果中间位置值小于目标值,则在右部分进行查找,如此循环,直到结束。二分查找算法之所以快是因为它没有遍历数组的每个元素,而仅仅是查找部分元素就能找到目标或确定其不存在,当然前提是查找范围为有序数组。

Java的简单实现

package me.geed.algorithms;

public class BinarySearch {

/**

* 从一个有序数组(如升序)中找到值为key元素

* @param key

* @param array

* @return 如果找到目标元素,则返回其在数组中的索引,否则返回-1

*/

public static int find(int key, int[] array){

int low = 0;

int high = array.length - 1;

while (low <= high) {

int mid = low + (high - low) / 2;

if (array[mid] > key) {

high = mid - 1;

} else if (array[mid] < key) {

low = mid + 1;

} else {

return mid;

}

}

return -1;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

int[] array = {2, 3, 5, 9, 10, 13, 23, 45, 78, 89, 100, 128, 256};

System.out.println("目标元素索引值:" + BinarySearch.find(9, array));

System.out.println("目标元素索引值:" + BinarySearch.find(26, array));

}

}

输出结果为:

目标元素索引值:3

目标元素索引值:-1

二分查找算法的时间复杂度

假设范围数组长度为N,则二分查找的时间复杂度为O(logN)

以上就是java算法中二分查找的实例详解,如有疑问请留言或到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java二分查找法_java算法之二分查找法的实例详解相关推荐

  1. java objectoutputstream怎么用_java序列化与ObjectOutputStream和ObjectInputStream的实例详解...

    java序列化与ObjectOutputStream和ObjectInputStream的实例详解 一个测试的实体类: public class Param implements Serializab ...

  2. java mysql教程基于_java基于jdbc连接mysql数据库功能实例详解

    本文实例讲述了java基于jdbc连接mysql数据库的方法.分享给大家供大家参考,具体如下: 一.JDBC简介 Java 数据库连接,(Java Database Connectivity,简称JD ...

  3. java 定义抽象变量_Java抽象类和抽象方法定义与用法实例详解

    本文实例讲述了Java抽象类和抽象方法定义与用法.分享给大家供大家参考,具体如下: 一.Java抽象类 1.抽象类的说明 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都 ...

  4. mysql删除重复数据只保留一条_mysql查找删除重复数据并只保留一条实例详解

    有这样一张表,表数据及结果如下: school_id school_name total_student test_takers 1239 Abraham Lincoln High School 55 ...

  5. php去除重复的数据保留一条,mysql查找删除重复数据并只保留一条实例详解

    有这样一张表,表数据及结果如下: school_id school_name total_student test_takers 1239 Abraham Lincoln High School 55 ...

  6. java构造方法重载_Java 重载、重写、构造函数的实例详解

    Java 重载.重写.构造函数的实例详解 方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定 ...

  7. java编译不报错但运行啥都没_java编译时与运行时概念与实例详解

    java编译时与运行时概念与实例详解 发布于 2020-7-29| 复制链接 本篇文章通过实例对 java程序编译时与运行时进行了详解,需要的朋友可以参考下 Java编译时与运行时很重要的概念,但是一 ...

  8. java 远程shell脚本_java通过ssh连接服务器执行shell命令详解及实例

    java通过ssh连接服务器执行shell命令详解 java通过ssh连接服务器执行shell命令:JSch 是SSH2的一个纯Java实现.它允许你连接到一个sshd 服务器,使用端口转发,X11转 ...

  9. java return返回值_java中关于return返回值的用法详解

    我们输入一个条件时,系统就会对这个条件进行判断,然后给出一个返回时的结论,我们把这个结果看做是返回值.在java里可以使用return语句来进行返回,从字面意思就能很好的理解它的用法了.下面我们就re ...

最新文章

  1. 【Linux】3_基本权限UGO的命令(chmod和chown)
  2. LaTeX 总决式 | 重剑无锋,大巧不工
  3. php钩子是啥意思,thinkphp钩子是什么意思
  4. ZOJ 3826 Hierarchical Notation 模拟
  5. Python 模块安装失败
  6. python基础7-函数
  7. 微信小程序 自定义picker封装成插件实现二级三级四级联动
  8. html 确定取消dialog,弹出一个带确认和取消的dialog实例
  9. Python三大神器之Virtualenv
  10. java语言难度最大的地方_学习难度最高的五大编程语言
  11. Eclipse设置护眼豆沙绿
  12. c语言实验八 二维数组,☆C语言实验六(二维数组、字符串数组).doc
  13. 【latex】Latex解决表格过宽问题,自适应调整宽度;自动调整适合的表格大小
  14. 公司总经理KPI考核指标
  15. word换pdf并且自动生成目录
  16. 若依前后台分离生成主子表
  17. iebook超级精灵服务业务蜕变始末
  18. 曙光tc4000a计算机为超级微型计算机,自考计算机应用基础判断题试题答案
  19. cct计算机考试介绍(全)
  20. matlab中abs函数如何用,Abs函数(ABS函数怎么用)

热门文章

  1. 开贴整理QtEmbedded/Qtopia FAQ --- 不可不看的精华都在这里哦[转]
  2. 安装编译PHP7.X
  3. redux和react-redux的使用详解
  4. 擒贼先擒王,简单谈一下JavaScript作用域链(Scope Chain)
  5. 阿里巴巴陈武:通过亿级用户App的实践验证,锤炼高质量APM体系
  6. Zabbix 监控Mysql数据库及主从数据库
  7. 学习结构[记录]类型(9) - 变体结构
  8. Visual Studio 2005 Professional Released
  9. mysql5.5设置字符编码
  10. crontab执行脚本中文乱码,手动执行没有问题