在计算机世界里“数据结构 算法=程序”,因此算法在程序开发中起着至关重要的作用。虽然我们在开发中自己设计算法的情况不多,在工作中却离不开算法。无论是开发包提供的算法还是我们自己设计的算法,算法在程序中都无处不在。

常用的算法有查找算法和排序算法。查找算法有线性查找算法、深度优先搜索算法、广度优先搜索算法和二分查找算法,而最常用也最快速的就是二分查找算法了。

二分查找算法又叫作折半查找,要求待查找的序列有序,每次查找都取中间位置的值与待查关键字进行比较,如果中间位置的值比待查关键字大,则在序列的左半部分继续执行该查找过程,如果中间位置的值比待查关键字小,则在序列的右半部分继续执行该查找过程,直到查找到关键字为止,否则在序列中没有待查关键字。

下图中,在有序数组[3,4,6,20,40,45,51,62,70,99,110] 中查找key=20的数据,根据二分查找算法,只需查找两次便能命中数据。

这里需要强调的是,二分查找算法要求要查找的集合是有序的,如果不是有序的集合,则先要通过排序算法排序后再进行查找。

二分查找算法的Java实现如下,代码定义了方法binarySearch()用于二分查找,在该方法中有3个变量low、mid和high,分别表示二分查找的最小、中间和最大的数据索引。

 1     publicstatic int  binarySearch(int []array,inta){2        intlow=0;3        inthigh=array.length-1;4        intmid;5       while(low<=high){6           mid=(low high)/2;//中间位置7           if(array[mid]==a){8               return mid;9           }else if(a>array[mid]){ //向右查找
10               low=mid 1;
11           }else{ //向左查找
12               high=mid-1;
13            }
14        }
15       return -1;
16    }

在以上代码中,通过一个while循环在数组中查找传入的数据,在该数据大于中间位置的数据时向右查找,即最大索引位置不变,将最小索引设置为上次循环的中间索引加1;在该数据小于中间位置的数据时向左查找,即最小索引位置不变,然后将最大索引设置为上次循环的中间索引并减1。重复以上过程,直到中间索引位置的数据等于要查找的数据,说明找到了要查找的数据,将该数据对应的索引返回。如果遍历到low>high还没有找到要查找的数据,则说明该数据在列表中不存在,返回-1。

面试官通常会在短短两小时内对面试者的知识结构进行全面了解,面试者在回答问题时如果拖泥带水且不能直击问题的本质,则很难充分表现自己,最终影响面试结果。

针对这种情况,《Offer来了:Java面试核心知识点精讲(原理篇)》一书出版上市。本书在讲解知识点时不拖泥带水,力求精简,详细介绍了Java程序员面试时常被问及的核心知识点。

面试在即,Java知识点很凌乱?别急,本书是对Java程序员面试必备知识点的总结,详细讲解了JVM原理、多线程、数据结构和算法、分布式缓存、设计模式等内容,除了原理讲解,还有Java实现!希望本书能够帮助你对Java的基础原理有更深入、全面的理解。

面试时的原理 动手实现脑海已就位,整装待发!互联网寒冬怕什么~

▉ 关于作者

王磊,现任国内某知名互联网公司大数据技术架构师,有十余年丰富的物联网及大数据研发和技术架构经验,对物联网及大数据的原理和技术实现有深刻的理解。长期从事海外项目的研发和交付工作,对异地多活数据中心的建设及高可用、高并发系统的设计有丰富的实战经验。

▉ 大咖推荐

  • 杨彪 / 美团高级架构师,《可伸缩服务架构》《分布式服务架构》作者
  • 知秋(simviso) / Java编程方法论系列书籍作者
  • 王新栋 / 京东资深架构师,《架构修炼之道》作者

▉ 章节架构

第1章 讲解JVM原理,涉及JVM运行机制、JVM内存模型、常用垃圾回收算法和JVM类加载机制等内容。

第2章 讲解Java基础知识,涉及集合、异常分类及处理、反射、注解、内部类、泛型和序列化等内容。

第3章 讲解Java并发编程知识,涉及Java多线程的工作原理及应用、Java线程池的工作原理及应用,以及锁、进程调度算法等内容。

第4章 讲解数据结构知识,涉及栈、队列、链表、散列表、二叉树、红黑树、图和位图等内容。

第5章 讲解Java中的常用算法,涉及二分查找、冒泡排序、插入排序、快速排序、希尔排序、归并排序、桶排序、基数排序等算法。

第6章 讲解网络与负载均衡原理,涉及TCP/IP、HTTP、常用负载均衡算法和LVS原理等内容。

第7章 讲解数据库及分布式事务原理,涉及数据库存储引擎、数据库并发操作和锁、数据库分布式事务等内容。

第8章 讲解分布式缓存的原理及应用,涉及分布式缓存介绍、Ehcache原理及应用、Redis原理及应用、分布式缓存设计的核心问题等内容。

第9章 讲解设计模式,涉及常见的23种经典设计模式。

了解本书详情

本文由博客一文多发平台 OpenWrite 发布!

Java面试必备知识点梳理:二分查找算法相关推荐

  1. LeetCode面试刷题技巧-二分查找算法代码思路解析

    二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使用过二分查找的思想,不信的话,且听我慢慢为你道来. 不知道你有没有玩过这样一个游戏,猜数字.就是说一个人心里想了 ...

  2. LeetCode面试刷题技巧-二分查找算法(下):通过 LeetCode 学习二分查找算法-销售价值减少的颜色球

    前言 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断更新的动力哟! MATLAB-30天带你从入门到精通 MATLAB深入理解高级教程(附源码) tableau可视化数据 ...

  3. 二分查找算法java

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元 ...

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

    二分查找算法定义:二分查找(binary search),也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法.搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结 ...

  5. Java 二分查找算法及效率比较

    1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后:将要查找的值和数组的中值 ...

  6. 面试大厂不看这两份Java面试核心知识点原理篇+框架篇,有个屁用?食屎啦泥?

    前言 面试在即,Java知识点很凌乱? 别急,有本套书在呢! 除了原理,还有框架! ★ 精细讲解JVM原理.Java基础.并发编程.数据结构和算法.网络与负载均衡 ★ 深入挖掘数据库与分布式事务.分布 ...

  7. 高级 Java 面试通关知识点整理

    转载自 高级 Java 面试通关知识点整理 1.常用设计模式 单例模式:懒汉式.饿汉式.双重校验锁.静态加载,内部类加载.枚举类加载.保证一个类仅有一个实例,并提供一个访问它的全局访问点. 代理模式: ...

  8. Java面试核心知识点(283页)Java面试题合集最新版(485页)

    阿里.腾讯两大互联网企业传来裁员消息,很多人都陷入担心,不安情绪蔓延-- 其实大家应该更冷静和理性地看待大厂裁员.每年三四月都是大厂人员调整期,这个季节是各个公司战略调整.战略规划的一个关键期,肯定会 ...

  9. 二分查找算法的万能公式(LeetCode35、704、1095)

    二分查找常常用于有序数组的查找操作.当然如果是一个问题,数组的顺序满足特定条件(不仅仅是升序或者降序,也可以是先升后降或先降后升),就可以通过逐步排查,缩小问题的规模的方式找到,这种算法也是二分查找算 ...

  10. 二分查找算法(递归与非递归两种方式)

    首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下 ...

最新文章

  1. 【怎样写代码】偷窥高手 -- 反射技术(六):深入窥视DLL内部
  2. RabbitMQ(四):RabbitMQ与Spring Boot简单整合 快速尝鲜版
  3. Spring 使用注解方式进行事务管理
  4. 有关手机屏幕的几个概念
  5. 如何使用反意疑问句来确认请求_24
  6. Mybatis.cfg配置标签的顺序问题
  7. 关于方法的重载和默认参数的一点小误区
  8. 孙鑫VC学习笔记:第十七讲 (二) 用匿名管道实现进程间的通信
  9. 【Java项目实战】黄金矿工小游戏项目介绍
  10. 计算机如何实现截长图功能,只会Ctrl+Alt+A?告诉你电脑截长图的5大方法
  11. 《计算机网络基础与应用》笔记
  12. 【高频电子线路】[模型]阻抗变换与阻抗匹配(第2章 谐振功率放大器)
  13. 3dmax 计算机中丢失,3dmax材质丢失怎么快速找回-解决3dmax材质不见了的方法 - 河东软件园...
  14. 【前端面试之缓存】js本地缓存、浏览器缓存、服务器缓存
  15. uni-app 小程序项目获取openid
  16. 用科学计算器求均值与方差(超详细)(概率论中使用)
  17. [0CTF 2016]piapiapia(反序列化逃逸)
  18. java证书cert_java – 使用带有证书路径(cert chain)的bouncy...
  19. Re:从0开始的微服务架构:(二)如何快速体验微服务架构?
  20. 用java实现简单绘图

热门文章

  1. CentOS7安装GNOME可视化界面 和 远程访问
  2. Python的基本数据类型(1)
  3. 删除数据所有的表和存储过程
  4. Ansi,UTF8,Unicode,ASCII编码的差别
  5. SVN记录转excel文件的小程序
  6. 将 varchar 值转换为数据类型为 int 的列时发生语法错误
  7. C++编程语言中整型转换为字符串类型的方法
  8. TX2Ubuntu16.04远程登录
  9. jdk8 lambda表达式
  10. JS判断用户手机是IOS还是Android