漫画:什么是二分查找?
戳蓝字“CSDN云计算”关注我们哦!
作者 | 蠢萌的小灰
来源 | 程序员小灰
————— 第二天 —————
什么意思呢?我们来举两个栗子:
给定一个有序数组
2,5,7,9,12,14,20,26,30
Case 1:
Case 2:
————————————
为什么说这样效率最高呢?因为每一次选择数字,无论偏大还是偏小,都可以让剩下的选择范围缩小一半。
给定范围0到1000的整数:
第一次我们选择500,发现偏大了,那么下一次的选择范围,就变成了1到499:
第二次我们选择250,发现还是偏大了,那么下一次的选择范围,就变成了1到249:
第三次我们选择125,发现偏小了,那么下一次的选择范围,就变成了126到249:
以此类推,最坏的情况需要猜测多少次呢?答案是 log1000 = 10次,也就是让原本的区间范围进行10次 “折半”。
刚才我们所分析的是猜数字的游戏。如果我们把场景转换成最初的面试问题:在包含1000个整型元素的有序数组中查找某个特定整数,又该如何去做呢?
同样道理,我们可以首先判断下标是499的元素(因为数组下标从0开始,到999结束),如果元素大于要查找的整数,我们再去判断下标是249的元素,然后判断下标124的元素......以此类推,直到最终找到想要的元素,或者选择范围等于0为止。
上述这个过程,就是所谓的二分查找算法,查找的时间复杂度是log(n)。
public static int binarySearch(int []array,int target){ static int binarySearch(int []array,int target){
//查找范围起点//查找范围起点
int start=0;int start=0;
//查找范围终点//查找范围终点
int end=array.length-1;int end=array.length-1;
//查找范围中位数//查找范围中位数
int mid;int mid;
//迭代进行二分查找
while(start<=end){while(start<=end){
mid=(start+end)/2;end)/2;
if(array[mid]==target){if(array[mid]==target){
return mid;return mid;
}else if(array[mid]<target){else if(array[mid]<target){
start=mid+1;1;
}else{else{
end=mid-1;end=mid-1;
}
}
return -1;return -1;
}
public static void main(String[] args) { static void main(String[] args) {
int[] array = new int[1000];int[] array = new int[1000];
for(int i=0; i<1000;i++){for(int i=0; i<1000;i++){
array[i] = i;
}
System.out.println(binarySearch(array, 173));System.out.println(binarySearch(array, 173));
}
福利
扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
推荐阅读:
IEEE 回应禁止华为系审稿人;WiFi联盟、蓝牙联盟已恢复华为成员资格;中国计算机学会:暂时中止与IEEE通信学会合作……
ARM 发布新一代 CPU 和 GPU,实现 20% 性能提升!
前端开发 20 年变迁史
北漂杭漂的程序员,是如何买到第一套房子?
“爱装X”开源组织:“教科书级”AI知识树究竟长什么样?
500行Python代码打造刷脸考勤系统
权游播完了, 你在骂烂尾, 有人却悄悄解锁了新操作……
真香,朕在看了!
漫画:什么是二分查找?相关推荐
- 再也不怕女朋友问我二分查找了!【手绘漫画】图解二分查找(修订版)(LeetCode 704题)
文章目录 图解算法与数据结构 1.前言 2.代码 3.实例(LeetCode 704题) 图解算法与数据结构 1.前言 上次讲到的更的二分查找模板在很多地方让我使用起来不是特别的舒服,感谢B站上的y大 ...
- 漫画:什么是二分查找
----- 第二天 ----- 什么意思呢?我们来举两个栗子: 给定一个有序数组 2,5,7,9,12,14,20,26,30 Case 1: Case 2: ------------ 为什么说这样效 ...
- 《漫画算法2》源码整理-3 二分查找 跳跃表
二分查找 public class BinarySearch {public static int binarySearch(int[] array, int target) {//查找范围起点int ...
- 《漫画算法2》源码整理-1 二分查找树 AVL树 红黑树
二分查找树 public class BinarySearchTree {private Node root;//查找结点public Node search(int data) {Node targ ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- LeetCode简单题之二分查找
题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...
- 二分查找模板全面总结
二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- 二分查找算法的一点改进
在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...
最新文章
- (13)处理静态资源(自定义资源映射)【从零开始学Spring Boot】
- easyui messager 消息框 对话框
- Android 查看设备文件
- 【Java8】堆栈/队列/数组/链表/红黑树,List/set子接口,hashcode/hashset,Map/内部接口,/统计字符个数,debug,斗地主,Collections,TreeSet
- 查看android手机原生app包名的方法
- SLAM:ORB-SLAM 位姿优化描述
- vb隐藏指定程序系统托盘图标_Windows环境设置系统托盘图标默认显示
- apache虚拟主机、日志轮询、日志统计、去版本优化
- android传感器开发与智能设备案例实战_【我的物联网成长记2】设备如何进行选型?...
- 【iOS】Touch Drag Inside 和 Touch Drag Outside、Touch Drag Enter、Touch Drag Exit的区别
- 26. The Greenhouse Effect and Its Consequences 温室效应及其后果
- echarter: ECharts的R语言接口(一)
- z变换解差分方程例题_Z变换解差分方程的思考
- Cocoa动画编程指南
- 【程序员必备】七夕表白攻略:”月遇从云,花遇和风,晚上的夜空很美“。(附源码合集)
- ES摄入性能优化(插入提高了2倍+ 17w/s到37w/s)
- Win10 - 对系统进行优化(低配电脑显著提升性能
- python解方程代码_Python解方程的技巧介绍(代码示例)
- v-chart 自定义显示格式
- 构建神经网络模型方法,神经网络建立数学模型
热门文章
- svg 折线添加新的折点
- 鸿蒙os2.0公测机型,鸿蒙OS2.0第二期第三期公测机型陆续公布 麒麟980和麒麟820将登场...
- Nature调查:中国博士生们的科研围城
- 怎么用计算机杀毒,电脑怎样查杀病毒
- 2020-08-20
- Visual studio Code的C/C++开发环境搭建
- perror()与strerror()的应用及区别 man手册查询
- 【链接保存】十分钟上手sklearn:特征提取,常用模型,交叉验证
- I begin to keep a daily
- resize和reverse的区别