算法图解——の——二分查找【附带pdf下载链接】
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下载链接】相关推荐
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- list 查找_趣味图解算法之二分查找
大多数程序员在看到"算法"两字的时候,是不是头大如斗.但如果想去大公司发展,在面试时又绕不过算法这座大山.市面上好多讲解算法的书籍(如算法导论)基本上都太学术.太复杂,对初学者很不 ...
- 数据结构与算法:二分查找
二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...
- 查找算法:二分查找、顺序查找
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...
- GitHub | 周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia | 联盟笔记 计算机视觉联盟 报道 | 公众号 CVLianMen ...
- Advances in Financial Machine Learning 导言 (附pdf下载链接)
目录 引言 作者 写作动机 本书结构 面向的核心读者 对读者的要求 pdf下载链接 引言 机器学习目前已经在图像识别.语音识别.自然语言处理等领域应用广泛,极大地改善了我们的生活体验.作为一名研习金融 ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...
- java二分查找法_java算法之二分查找法的实例详解
java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...
- 【报告分享】女性自我保护手册,教你应对10种常见危险处境.pdf(附189页pdf下载链接)...
前两周PUA沸沸扬扬,今天给广大女粉丝分享一篇手册<女性自我保护手册,教你应对10种常见危险处境 .pdf>,该手册由北京大学心理资讯中心和壹心理联合出品,我简单看了一下,手册内容非常丰富 ...
- 分子生物学课本PDF下载链接
我很抱歉,因为版权原因我无法提供分子生物学课本的 PDF 下载链接.我建议你到图书馆或者正规渠道购买.
最新文章
- angular.foreach 格式
- 无人驾驶定位与贝叶斯滤波
- 东南大学计算机科学试验中心,受迫振动试验数据处理的研究-东南大学物理试验中心.doc...
- loadrunner中的c函数----从参数列表中取参数并与特定字符进行字符串比较。
- HDU 3632 A Captivating Match
- Web 安全漏洞之 XSS 攻击,Java 开发必看!
- SharePoint 数据库管理-PowerShell
- Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
- cookie封装做免输入登录
- python 算法库_一个易用又功能强大的 Python遗传算法库
- ue4账号注册不了_英雄联盟手游拳头账号注册
- STM32F205 PWM配置
- 如何在excel中创建二级菜单,即选择一个类型后,下一单元格可以选择其子类型
- 最小外接矩形--最大内接矩形
- P2P追债也用上大数据
- 史上最强模型 GPT-4 上线:一张手绘草图能生一个网站、60 秒搞定一个游戏开发!
- CISP——密码学基本概念(术语)
- 互联网创业必备工具盘点
- Ordering类-greatestOf
- layui外部引入_layui use 定义js外部引用函数的方法