时间复杂度概念还不清楚的可以先看我的下面这个文章:
https://blog.csdn.net/u010452388/article/details/80875958

由于二分查找每次查询都是从数组中间切开查询,所以每次查询,剩余的查询数为上一次的一半,从下表可以清晰的看出查询次数与剩余元素数量对应关系


表-查询次数及剩余数

第几次查询 剩余待查询元素数量
1 N/2
2 N/(2^2)
3 N/(2^3)
K N/(2^K)

从上表可以看出N/(2^K)肯定是大于等于1,也就是N/(2^K)>=1,我们计算时间复杂度是按照最坏的情况进行计算,也就是是查到剩余最后一个数才查到我们想要的数据,也就是
N/(2^K)=1
=>N=2^K
=>K=log2N
所以二分查找的时间复杂度为O(log2N)


代码

/*** 二分查找* @param arr 指定查询的数组* @param searchNum 要查询的数字* @return 返回查询的的结果(数组中的索引),没有则返回-1*/public static int binerySearch(int[] arr, int searchNum) {// 初始化左侧索引int leftIndex = 0;// 初始化右侧索引int rightIndex = arr.length - 1;while (leftIndex <= rightIndex) {// 计算中间索引int mid = (leftIndex + rightIndex) >>> 1;//主要防止溢出,就是除以2的意思// 如果查询的数等于中间索引对应的数组里的数,则返回mid索引,并退出循环if (searchNum == arr[mid]) {return mid;}// 判断并计算右侧索引if (searchNum < arr[mid]) {rightIndex = mid - 1;}// 判断并计算左侧索引if (searchNum > arr[mid]) {leftIndex = mid + 1;}}return -1;}

算法 二分查找的时间复杂度为O(log2N)的原因推理相关推荐

  1. 算法简介——二分查找,时间复杂度,空间复杂度

    文章目录 前言 二分查找 时间复杂度 大O表示法 空间复杂度 小结 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略 ...

  2. 二分查找的时间复杂度以及算法

    ​ 给定一个规模为n的按照数字从小到大排序的数组,快速查询x元素在数组中的位置 示例: 数组:[1,3,6,9,14,35,67] 查找的值:9输出:3 1.计算数据规模为n二分查找的时间复杂度 循环 ...

  3. 数据结构三大查找算法(二分查找、插值查找、斐波那契数列查找)C语言实现

    文章目录 查找 二分查找(折半查找) 插值查找 斐波拉契查找 总结: 查找 查找是在大量的信息里面寻找一个特定的信息元素 (1)静态查找和动态查找: 静态或者动态都是针对查找表而言的.动态表指查找表中 ...

  4. 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)

    数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...

  5. 二分查找的时间复杂度分析

    话不多说,先上代码 : public int binarysearch (int []array,int value ){int begin =0;int end = array.length -1; ...

  6. java 二分查找_计算机入门必备算法——二分查找法

    1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...

  7. 算法学习:我终于明白二分查找的时间复杂度为什么是O(logn)了

    最近发现了个好东西,就是一个学算法的好东西,是网易公开课的一个视频. 直通车 这是麻省理工学院的公开课,有中英字幕,感谢网易.. 也可以在App把视频缓存下来之后再放到电脑上面看,因为我这样可以倍速, ...

  8. 二分查找与时间复杂度计算分析

    二分查找: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.   原理:假设表中元素 ...

  9. 90%的程序员都写错的算法-二分查找万能模版

    新的角度看二分 二分就是将数组分为两段 因此,问题的最终目标是找出蓝红边界 朴素算法 红色指针一开始指向最右超出范围处,随后不断向左移动,直到找到蓝红边界:或者蓝色指针- 时间复杂度O(n)O(n)O ...

最新文章

  1. HDU 4609 3-idiots FFT
  2. ssh-keygen-基础使用
  3. Dynamics CRM Publisher
  4. Tick技术栈之InfluxDB
  5. 计算机联网实验步骤,计算机网络技术实验操作过程.doc
  6. Google Guava缓存实现接口的限流
  7. 【报告分享】百度大脑AI技术成果白皮书2018-2019.pdf
  8. XMLHttpRequest异步时的超级链接调用函数问题
  9. C#数组和集合专题2(Array)
  10. js如何监听元素事件是否被移除_javascript:什么是js事件?(上)
  11. 由一个照片,可以看出云是个物体
  12. 极光短信验证码JAVA_Android如何集成极光短信验证
  13. udp java 检测连接_java创建udp连接 java udp怎样测试是否连接
  14. ai人工智能的数据服务_AI如何帮助提高企业数据质量
  15. 能够自动绘制网络拓扑图的软件——WGCLOUD
  16. C++ QT调用python脚本并将软件打包发布
  17. 唯品会开盘股价超过8美元 市值再超当当网
  18. Canvas入门篇(一)
  19. 奔腾PLFE5001电压力锅
  20. Oracle19C 解决scott不存在的问题

热门文章

  1. SGM6230关键参数及其曲线特性的分析
  2. 网络营销教程SEO 第四章 搜索引擎优化基础(第四节)
  3. 足球数据【图文直播】API调用示例代码
  4. vivoz5电池测试软件,vivo Z5续航能力测评!配备4500mAh大电池,续航神机名不虚传...
  5. Javascript查找字符串中的某个值,截取其之前。和之后的值
  6. Android使用AudioTrack播放WAV音频文件
  7. 前端常见面试题——闭包
  8. Python:SSH连接及FTP文件传输
  9. Netty游戏服务器开发实战(14):游戏推送的设计
  10. Android 性能优化lt;九 RecyclerView替代Listview用法