1、二分查找要求输入集合有序,所以好多算法会涉及到排序

2、二分查找效率高,用二分查找最多需要log 2 n步,而简单查找最多需要n步

举例说下,例如1.2.3......1024,二分查找最多需要log2 1024即10次,而普通查找最多需要1024次,发现有100倍的差距,数量越大,越明显

链接:https://pan.baidu.com/s/1V4rsYsFvwS745E05Cj5ZEQ 
提取码:x7y4 
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V5的分享

下面列出二分查找的java代码供参考,两个 不同的区别是,如果输入集合只有一个时,的代码拆分与整合。

/*** Created by burns.** @author <a href="http://www.esoon-soft.com/">burns</a>* @date 2021/03/21 8:58*/import java.util.ArrayList;
import java.util.List;/*** 二分查找** @ClassName BinarySearch* @Author Burns* @DAte 2021/3/21 8:58*/
public class BinarySearch {public static void main(String[] args){{//第一种情况,传入的list为空System.out.println("第一种情况------start-------");List<Integer> list1 = null;int index = binarySearch(list1,0);outputInfo(index);System.out.println("第一种情况------end-------");}{//第二种情况,传递的list只有一个值System.out.println("第二种情况------start-------");List<Integer> list2 = new ArrayList<Integer>();list2.add(1);int index = binarySearch(list2,1);outputInfo(index);System.out.println("第二种情况------end-------");}{//第三种情况,传递的list有多个值System.out.println("第三种情况------start-------");List<Integer> list3 = new ArrayList<Integer>();list3.add(1);list3.add(2);list3.add(3);list3.add(4);list3.add(5);int index = binarySearch(list3,3);outputInfo(index);System.out.println("第三种情况------end-------");}//        其中 第二和第三种情况可以合并在一起,区别是 while (low<high)改成 while (low<=high){}private static void outputInfo(int index) {if(index==-1){System.out.println("没找到");}else {System.out.println("找到了,序列是"+index);}}/*** 三种情况分开** @Description:* @Param: [list, n]* @Return: int* @Author: Burns* @Date: 2021/3/21*/private static int binarySearch(List<Integer> list,int n){if(list == null || list.size()==0){System.out.println("输入集合为空!");return -1;}else {if(list.size()==1){if(n==list.get(0)){return 0;}else {System.out.println("没找到!");return -1;}}else {//定义开头和结尾部分要查找的位置序号,list的第一个值是从0开始的,所以high就是list的数量-1int low = 0;int high = list.size()-1;//如果low小于等于high,说明值还没有找到,需要继续找,否则while (low<high){int mid = (low+high)/2;//猜测值为中间的值int guess = list.get(mid);//如果猜测值和中间值相等,则返回if(guess==n){return mid;}//如果猜测值比查找值大if(guess>n){high = mid-1;}else {low = mid+1;}}return -1;}}}}
/*** Created by burns.** @author <a href="http://www.esoon-soft.com/">burns</a>* @date 2021/03/21 8:58*/import java.util.ArrayList;
import java.util.List;/*** 二分查找** @ClassName BinarySearch* @Author Burns* @DAte 2021/3/21 8:58*/
public class BinarySearch1 {public static void main(String[] args) {{//第一种情况,传入的list为空System.out.println("第一种情况------start-------");List<Integer> list1 = null;int index = binarySearch(list1, 0);outputInfo(index);System.out.println("第一种情况------end-------");}{//第二种情况,传递的list只有一个值System.out.println("第二种情况------start-------");List<Integer> list2 = new ArrayList<Integer>();list2.add(1);int index = binarySearch(list2, 1);outputInfo(index);System.out.println("第二种情况------end-------");}{//第三种情况,传递的list有多个值System.out.println("第三种情况------start-------");List<Integer> list3 = new ArrayList<Integer>();list3.add(1);list3.add(2);list3.add(3);list3.add(4);list3.add(5);int index = binarySearch(list3, 3);outputInfo(index);System.out.println("第三种情况------end-------");}//        其中 第二和第三种情况可以合并在一起,区别是 while (low<high)改成 while (low<=high){}private static void outputInfo(int index) {if (index == -1) {System.out.println("没找到");} else {System.out.println("找到了,序列是" + index);}}/*** 三种情况分开** @Description:* @Param: [list, n]* @Return: int* @Author: Burns* @Date: 2021/3/21*/private static int binarySearch(List<Integer> list, int n) {if (list == null || list.size() == 0) {System.out.println("输入集合为空!");return -1;} else {//定义开头和结尾部分要查找的位置序号,list的第一个值是从0开始的,所以high就是list的数量-1int low = 0;int high = list.size() - 1;//如果low小于等于high,说明值还没有找到,需要继续找,否则while (low <= high) {int mid = (low + high) / 2;//猜测值为中间的值int guess = list.get(mid);//如果猜测值和中间值相等,则返回if (guess == n) {return mid;}//如果猜测值比查找值大if (guess > n) {high = mid - 1;} else {low = mid + 1;}}return -1;}}}

算法图解——の——二分查找【附带pdf下载链接】相关推荐

  1. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  2. list 查找_趣味图解算法之二分查找

    大多数程序员在看到"算法"两字的时候,是不是头大如斗.但如果想去大公司发展,在面试时又绕不过算法这座大山.市面上好多讲解算法的书籍(如算法导论)基本上都太学术.太复杂,对初学者很不 ...

  3. 数据结构与算法:二分查找

    二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...

  4. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

  5. GitHub | 周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia              | 联盟笔记 计算机视觉联盟  报道  | 公众号 CVLianMen ...

  6. Advances in Financial Machine Learning 导言 (附pdf下载链接)

    目录 引言 作者 写作动机 本书结构 面向的核心读者 对读者的要求 pdf下载链接 引言 机器学习目前已经在图像识别.语音识别.自然语言处理等领域应用广泛,极大地改善了我们的生活体验.作为一名研习金融 ...

  7. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

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

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  9. 【报告分享】女性自我保护手册,教你应对10种常见危险处境.pdf(附189页pdf下载链接)...

    前两周PUA沸沸扬扬,今天给广大女粉丝分享一篇手册<女性自我保护手册,教你应对10种常见危险处境 .pdf>,该手册由北京大学心理资讯中心和壹心理联合出品,我简单看了一下,手册内容非常丰富 ...

  10. 分子生物学课本PDF下载链接

    我很抱歉,因为版权原因我无法提供分子生物学课本的 PDF 下载链接.我建议你到图书馆或者正规渠道购买.

最新文章

  1. angular.foreach 格式
  2. 无人驾驶定位与贝叶斯滤波
  3. 东南大学计算机科学试验中心,受迫振动试验数据处理的研究-东南大学物理试验中心.doc...
  4. loadrunner中的c函数----从参数列表中取参数并与特定字符进行字符串比较。
  5. HDU 3632 A Captivating Match
  6. Web 安全漏洞之 XSS 攻击,Java 开发必看!
  7. SharePoint 数据库管理-PowerShell
  8. Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
  9. cookie封装做免输入登录
  10. python 算法库_一个易用又功能强大的 Python遗传算法库
  11. ue4账号注册不了_英雄联盟手游拳头账号注册
  12. STM32F205 PWM配置
  13. 如何在excel中创建二级菜单,即选择一个类型后,下一单元格可以选择其子类型
  14. 最小外接矩形--最大内接矩形
  15. P2P追债也用上大数据
  16. 史上最强模型 GPT-4 上线:一张手绘草图能生一个网站、60 秒搞定一个游戏开发!
  17. CISP——密码学基本概念(术语)
  18. 互联网创业必备工具盘点
  19. Ordering类-greatestOf
  20. layui外部引入_layui use 定义js外部引用函数的方法

热门文章

  1. m序列生成方法及其fpga实现
  2. Matlab中配置vlfeat库
  3. jquery-weui的学习与使用
  4. 学习语文必须掌握的知识点思维导图
  5. iOS下载历史版本App教程
  6. 天猫京东618下单金额近万亿;中国 5G 毫米波芯片研发成功;阿里P8招聘私人助理被辞退 | EA周报...
  7. linux音频alsa-uda134x驱动文档阅读之一(over-view)
  8. 安川g7接线端子图_安川G7变频器各接线端子功能说明
  9. 2019Java视频教程-玩转oracle
  10. 备考计算机三级数据库——SQL 案例