二分法查找,也称折半法,是一种在有序数组中查找特定元素的搜索算法。

以一个案例来分析,二分法查找的思路如下:

(1)首先,确定数组的中间下标mid(这里不用管整不整除,只要比较中间就可以),将mid对应元素与查找元素对比(本例子就是14)如果该元素正好是目标元素,则搜索过程结束。如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找。

(2)根据上次的比较确定新的范围,重复第一步。

(3)如果某一步left与ringt都已经到达同一个位置范围小到只有一个数然后还是不等,下一步再缩小范围,left就会大于right,说明找不到目标元素。

如果循环查找过程中,mid对应数字巧好等于对应数字那可以直接返回,否则范围就一定越来越小,最后两个left,right相等,还不相等,那么left一定回大于right。因为每次调整时left = mid + 1,right=mid-1。

值得注意的是:循环条件 left <= right ,调整时:left = mid + 1,right=mid-1;

​
int binary_search(int arr[], int num,int len)
{int left = 0;int right = len - 1;int mid = 0;while (left <= right){mid = left + (right - left) / 2;if (arr[mid] > num){right = mid - 1;}else if (arr[mid] > num){left = mid + 1;}else{return mid;}}return -1;}​

注:1.求数组的长度来确定right的话,函数必须要接收一个int值放它的长度。

因为形式参数会是实参的一份临时拷贝,但是C语言里数组是不会拷贝的,因为数组都内容比较多如果都拷贝一份比较浪费空间,所以C语言里数组的形式参数只是赋值得到它的第一个地址,拿到地址可以访问数组所有元素,但是无法拿到数组长度的。

2.mid = left + (right - left) / 2;为了避免mid=(left+right)/2,会导致left加上right后超多int表示表示的范围。

3.二分法查找的时间复杂度O(logn)。

C语言二分法查找详解相关推荐

  1. python语言的格式框架_django框架模板语言使用方法详解

    本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...

  2. 单片机c语言常用的语句有几条,单片机C语言常用语句详解

    <单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程中常见语句的总结.首先,C51定义 ...

  3. R语言which函数详解以及Rcpp改写

    R语言which函数详解以及Rcpp的改写 引言 which 函数的介绍 which函数的一些小例子 1 2 which函数的改进以及时间对比 引言 首先来介绍一下R语言which函数的作用:whic ...

  4. (转)C语言位运算详解

    地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...

  5. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  6. c语言练习题及答案)(1),c语言练习题(带详解答案)1.pdf

    c语言练习题(带详解答案)1 (-2) -1: 一单项选择题 /为求商运算符,该运算符能够对整型.字符.浮点等类型的数 据进行运算,5/2 2 1.(A )是构成C语言程序的基本单位. 11.如果 i ...

  7. C语言再学习 -- 详解C++/C 面试题 2

    (经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...

  8. C语言二分法查找数组

    C语言二分法查找数组 要实现的功能如下 完整源代码实现如下 要实现的功能如下 采用二分法查找,若找到输出:数所在的下标,否则输出sorry 完整源代码实现如下 #include "stdio ...

  9. python自动解析json_Python语言解析JSON详解

    本文主要向大家介绍了Python语言解析JSON详解,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. JSON 函数使用 JSON 函数需要导入 json 库:import jso ...

最新文章

  1. Access denied for user(这个几乎让我怀疑人生的异常)
  2. 服务器告警其一:硬盘raid问题
  3. 楼继伟:现有5G技术很不成熟
  4. python给函数添加属性_如何在python中自动向类添加属性?
  5. git重命名远程仓库名字 同步fork代码
  6. 赋予用户最高权限的一点“挫折”
  7. 《英雄联盟:双城之战》全球首映 沉浸式观影打造追剧新潮流
  8. 面向对象的JavaScript-007-Function.prototype.bind() 的4种作用
  9. 图片放大缩小旋转左移右移镜像倒影android
  10. Bzoj 2154: Crash的数字表格(积性函数)
  11. U盘PE删除影子系统(PowerShadow),解决安装后重启蓝屏的问题
  12. win7系统安装sql2000数据库时没有反应,不出来安装界面?
  13. Android UI
  14. 湖北理工学院c语言作业实验六,湖北理工学院c语言实验报告实验六
  15. Android之ContextMenu的使用方法以及与OptionMenu的区别
  16. 法律法规与标准化知识
  17. 解决联想e470c 无线网卡驱动
  18. opencv去除图片中某一颜色(python实现)
  19. 电商代运营是做什么的
  20. 用Python分析韩国女团喜欢什么单词

热门文章

  1. 博士一篇SCI四区即可入职!安家费120万,直接进编,无非升即走!
  2. 机器学习新-统计机器学习第二版
  3. 分位数回归(Quantile regression)笔记
  4. 两款实用的DDos攻击工具
  5. 【Struts2】一_idea快速搭建struts2框架
  6. Linux 发布全新 6.0 版; 谷歌超微软开源贡献第一; GitHub 遭数万恶意攻击 | 开源月报 Vol.9...
  7. 贪心算法--电影节(openjudge 4151 )
  8. html中第二行标签之间间隔不一样,Word第一行字和第二行字之间的间距怎么不一样...
  9. 图解JVM--(四)内存模型
  10. k8s之滚动更新及pod流量分析