1. 折半查找法定义
         折半查找法,也称为二分查找法, 二分搜索, 是一种在有序数组中查找某一特定元素的搜索算法.搜索过程中从数组的中间元素开始, 如果中间元素正好是要查找的元素, 则搜索过程结束;如果某一特定元素大于或者小于中间元素, 则在数组大于或小雨元素的那一半中查找, 而且跟开始一样从中间元素开始比较. 若某1个步骤中数组为空, 则代表找不到. 这种搜索算法每一次比骄傲都使搜索范围缩小一半.

-- 摘自维基百科.

2. 折半查找法分析
         从定义中可以看出折半查找法有几个特性.

2.1 先决条件: 要搜索的数据已经排好序
         当然, 怎样将数据排序也是1个算法, 这里先不考究了, 但是要使用折半查找法, 这个条件是必需满足的

2.2 折半查找法适合海量数据查找
      
折半查找法每执行1次.就会抛弃一半的无用数据, 如果数据很少的话,其实比线性查找快不了多少, 但是数据量很大的话, 抛弃的一半无用数据就很客观了!   相对于线性查找中节省了这一半数据的遍历时间啊.

2.3 折半查找法算法复杂度
      
假如要查找数据的数量是n, 查找的次数为x,那么查找1次(x=1), 剩下的数据量就是 (n-1)/2 = n/2 -1/2了
         当x=2 时  剩下的数据量就是  n/4 - 3/4
         当x=3 时  剩下的数据量就是  n/8 - 7/8

所以剩下的数据量R =  n/2^x   - 1 + 1/2^x

当x很大时,  R就~= n/2^x -1 了

那么什么时候才会肯定会找出要找的数据呢, 或者缺认该数据不存在呢.
          就是当剩余的数据量R=0 时啊.

这时  n/2^x -1 =0  => 2^x = n => x= log2^n   (底为2,幂为n的对数)
           所以算法复杂度就是  O(log2^n)
           比起线性查找的算法复杂度O(n) , 优胜很多了.(如果n很大的话)

3. 折半查找法的一个实现例子(c语言)

上面的bsget函数就用了折半查找法:
输出:

数据结构--折半查找法 详解相关推荐

  1. 数据结构——折半查找法

    版权声明:本文为博主原创文章,转载请注本文链接. /************************ author's email:wardseptember@gmail.com date:2018. ...

  2. 二分查找(折半查找)详解

    二分查找详解 1. 二分查找的引入 2. 二分的一些基本知识 1) 定义 2) 特点 3. 二分查找的边界问题 1) 常用模板 2)综合练习 4.二分的应用 1) Flyer 2) Distribut ...

  3. Python二分查找/折半查找算法详解--(面试常考)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究)   二分查找也称折 ...

  4. 数据结构-折半查找法的ASL计算

    (1)通常用查找过程中对关键字的比较次数 作为衡量算法效率优劣的标准. (2)平均查找长度-ASL,相当于时间复杂度分析时的f(n)函数. (3)考研的一个考点. (4)ASL求解的关键就是建立折半查 ...

  5. 数据结构之折半插入排序图文详解及代码(C++实现)

    问题: 对待排序的数组r[1..n]中的元素进行直接插入排序,得到一个有序的(从小到大)的数组r[1..n]. 算法思想: 1.设待排序的记录存放在数组r[1..n]中,r[1]是一个有序序列. 2. ...

  6. 【数据结构】折半查找法

    问题描述 使用折半查找法实现给定一个有序(非降序)数组A,可含有重复元素,求最大的i使得A[i]小于target,不存在则返回 -1 输入形式 第一行:非降序数组A 第二行:target 输出形式 位 ...

  7. 数据结构之折半查找法(Binary Search)

    对于要查找的数据已经排序,此时仍然可以使用顺序查找法来进行查找,但是此时有更加简便的方法, 那就是"折半查找法(Binary Search)". 折半查找法的实现步骤如下: 假设数 ...

  8. 【数据结构与算法】详解什么是图结构,并用代码手动实现一个图结构

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  9. JavaScript数据结构与算法——链表详解(下)

    在JavaScript数据结构与算法--链表详解(上)中,我们探讨了一下链表的定义.实现原理以及单链表的实现.接下来我们进一步了解一下链表的其他内容. 1.双向链表 双向链表实现原理图: 与单向链表不 ...

最新文章

  1. 解决:vs2013 错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.
  2. 超级队长VR线下体验店落地上海,让娱乐突破想象
  3. git push代码到远程新分支
  4. 使用Visio 2000逆向工程将代码转换为UML图表
  5. 4.数据库(增删改查)备份及恢复
  6. redis info查看信息
  7. 在.NET中调用Oracle9i存储过程经验总结
  8. 提高Office2010等高版的启动速度文章链接收集-Office2010打开慢速度怎么办?
  9. 牛腩新闻发布系统—错误总结
  10. PPT(PowerPoint)更改默认等线字体
  11. 如何把html转为excel,怎么把网页转化为excel
  12. java菜鸟疑问1:为什么我的代码总出现cannot be resolved or is not a field这种问题
  13. 计算机变异指标可以,变异系数公式_在EXCEL中怎样计算样本标准差和变异系数
  14. 线程的先进先出,后进先出,以及优先级队列
  15. npm/package.json/package-lock.json文件
  16. PCF8591详解(蓝桥杯单片机模块(IIC总线))
  17. VGA原理详解与verilog实现RGB888彩条(二)
  18. ❤️❤️❤️Unity废柴看过来,手把手教你做植物大战僵尸(二)—— 序列帧动画
  19. C语言Dialogbox添加图片,dialogbox_传奇服务端CloseBigDialogBox是什么意思
  20. c语言计算年龄的编程,C语言编程实现---计算实际年龄

热门文章

  1. Django中HttpResponse和JsonResponse的区别和用法
  2. linux两个网段默认网关_Linux下配置多网卡多网关
  3. 汇编之浮点数处理(CrackMe003前置知识)
  4. 【Nginx】 server 配置记录
  5. 【Storage】localStorage 或 sessionStorage 首次加载,需要再次手动刷新页面的解决方案
  6. 2021暑假每日一题 【week9 完结】
  7. Linux修改文件/目录权限
  8. selenium2与python自动化4-css元素定位
  9. Volatile可见性
  10. typescript ajax,TypeScript的应用方式