二分查找,顾名思义,它的原理是,将排序好的数列分成两部分,判断期待值在高位部分还是在低位部分,然后再将期待值所在的那个区间的数列重新按照这个规则划分成两部分,再比较,直到最后不能划分为止。

优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

假设其数组长度为n,那么该算法复杂度为o(log(n))。代码如下:

1 int binarySearch( int *a , int begin, int end, int key)
2 {
3     int mid = begin + ((end - begin)>>1 ), index;
4     index = a[mid] < key && begin +1 < end ? binarySearch(a, mid+1, end ,key):
5                (a[mid] > key && begin + 1 < end ? binarySearch(a, begin, mid, key):
6                  mid*(a[mid] == key) + (-1)*(a[mid] != key) );
7
8     return index;
9 }

ps.第三行是为了防止int相加后超过int的最大值,故采用这样的算法。

转载于:https://www.cnblogs.com/csusheep/p/4724745.html

算法回顾(三) 二分查找相关推荐

  1. 算法前戏 递归 二分查找 列表查找

    一.递归 概念: 函数直接或者间接的调用自身算法的过程,则该函数称为递归函数.在计算机编写程序中,递归算法对解决一大类问题是十分有效的. 特点: ①递归就是在过程或者函数里调用自身. ②在使用递归策略 ...

  2. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  3. 算法基础——关于二分查找的那些事

    文章目录 二分查找的思路 算法复杂度 几种不同的二分查找 1. 普通二分 2. 二分答案 3. 小数二分 二分查找的思路 二分查找也称为折半查找(binary search),适用于顺序存储结构的线性 ...

  4. 数据结构 | 折半查找 /二分查找 算法细节、二分查找判定树

    一.基本思想 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步 ...

  5. 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作

    目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...

  6. c语言二分法查找一个数_算法简解-二分查找

    读书不记录=没读,始终是我的信条·····最近因为要参加竞赛,发现自己真的差的很远,所以打算重新开始学习一遍算法及AI的相关数学知识,相信很多人都是闻数学,理工科色变,之前也是觉得上数理课太难了,真的 ...

  7. java 二分搜索获得大于目标数的第一位_程序员数据结构算法编程,二分查找搜索算法的原理与应用介绍!...

    本文来讲一种搜索算法,即二分搜索算法,通常在面试时也会被问到. 我们先来看一个例子,在图书馆通常是根据查到的编号去找书,可以在书架上按顺序一本本地查找,也可以找到一本书不符合预期时,再跳过一大部分书再 ...

  8. C++算法五:二分查找(折半)查找

    二分查找是对排序的数据进行排序,查找效率非常高. 2的20次方是100万,就是(1M),折半查找100万个数据只需要20次 2的30次方就是10亿,也就是(1G),折半查找只需要30次 #includ ...

  9. 常用算法1 - 快速排序 二分查找

    1. 二分查找法: 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1. 二分查找法要求数据为一组有序的序列(大到小 ...

  10. 大前端算法入门之二分查找

    现如今面试大厂的前端岗位对于应聘者的算法技巧要求越来越高,现在的前端已经不仅仅是制作页面就能够交差的,所以掌握算法技巧是很重要的,下面小千就来给大家介绍一个二分查找算法. 二分查找 所谓的算法都不是直 ...

最新文章

  1. Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录
  2. 知乎超高赞:都有哪些习惯值得长期坚持?
  3. linux服务器配置与管理_服务器维护实施步骤
  4. C#获取文件夹及文件的大小与占用空间的方法
  5. windows安装gnu_在Windows上安装GNU Emacs
  6. IBM 2nm芯片弯道超车了?他连车都没有
  7. nginx tornado php,tornado+nginx+python 微信公众号接入配置
  8. CCF201503-5 最小花费(30分)
  9. canvas beginPath()的初步理解
  10. iOS从零开始学习直播之音频4.歌词
  11. 电商大促特辑:蘑菇街致美丽新世界的架构礼
  12. FishC《零基础学习python》笔记--第002讲:用Python设计第一个游戏
  13. yjk计算书_用户手册
  14. 岩土工程颗粒流软件PFC6.0技巧——按计算时间导出数据、图像及保存文件
  15. ic 卡获取帐号apdu指令_pboc 读卡流程,apdu读卡流程
  16. 彩虹易支付全开源码全新完全开源无任何加密易支付程序
  17. Main Menu菜单栏消失解决
  18. 港科夜闻|香港科技大学(广州)拟获批首个省级重点实验室
  19. SVN入门必备教程 一看就懂
  20. 【渝粤题库】陕西师范大学200791 软件工程

热门文章

  1. 《LeetCode力扣练习》剑指 Offer 28. 对称的二叉树 Java
  2. python encoding报错_python用requests递归查询页面 报错 ChunkedEncodingError
  3. bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道
  4. js轮询导致服务器瘫痪_演进:Tengine 从 Web 代理服务器 到 分布式推送服务器
  5. php header 重定向 url不变_PHP实现页面跳转功能
  6. iphone连上wifi却上不了网_必收藏为什么手机信号满格,却上不了网,4招为你解决...
  7. js vm报错_uni-app v3版本更新常见问题排查
  8. 11.QT事件机制源码时序分析(下)
  9. python评语生成_如何评价生成模型框架 ZhuSuan?
  10. 聊聊flink的NetworkEnvironmentConfiguration