目录

一.前言

二.二分查找法

1.什么是二分查找法

2.如何用c语言来实现二分查找法

三.总结


一.前言

假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,4,5,6,7,8,9"这九个数组成的数组来说,假如我们想寻找'2',那很简单我们只用从小到大开始寻找,寻找两次就完成了,但是我们想寻找'7',我们继续用从小到大挨个寻找,这就显得有点慢并且耗时长还没有效率,因此我们可以有一种全新的方法,二分查找法来解决这个问题。

二.二分查找法

1.什么是二分查找法

二分查找法,又叫做折半查找法,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。就用刚刚的数组来说,我们想寻找'7',很简单我们先用7和数组中间的数来比较大小,很明显7大于,所以我们缩小范围,从中间的右边开始继续取中间值,继续寻找,直到找到位置,这样一看找的次数少了很多,而且速度也快了不少。

2.如何用c语言来实现二分查找法

咱们来分析一下刚刚我说的找数字7的过程,首先我们需要数组的中间的数也就是中间数的下标值,那我们就需要直到数组第一个元素和最后一个元素的下标值,数组第一个元素下标值很明显是0,我们把他定义成left;这个最后一个元素的下标值我们就需要利用sizeof来计算,我们把他定义成rigth。然后两个相加,算出最中间的下标,我们把他定义为mid,和要找的数进行比较,假如大于要找的数那就从mid+1和right之间来继续刚刚的循环,假如小于要找的数那我们就从left和mid-1之间寻找。就这样一直循环,直到找到目标数为止。

代码的实现如下

void Findnum(int* arr, int key,int sz)//arr为目标数组,key为需要查找的数,sz为数组元素的大小
{//二分查找int  left = 0;//左边int right = sz-1;//右边while (left <= right){int mid = (right + left) / 2;if (arr[mid] > key){//说明key在arr[mid]和left之间right = mid - 1;}else if (arr[mid] < key){left = mid + 1;}else{printf("找到了,对应的下标为:%d\n", mid);break;}}if (left > right){printf("找不到\n");}
}

最后运行

三.总结

关于上面的过程,我们不难发现二分查找法虽然很快,但是有两个很明显的缺点,一个是他实现的条件必须是一个有序的数列,另外一个是他只能一次性找一个数而不是多个,这就让他有了很多局限性。二分查找有个很重要的特点,就是不会查找数列的全部元素,而查找的数据量其实正好符合元素的对数,正常情况下每次查找的元素都在一半一半地减少。所以二分查找的时间复杂度为

log2o是毫无疑问的。

c语言实现二分查找法相关推荐

  1. 通过C语言实现二分查找法

    Hellow,我是jack,今天给大家分享的是C语言实现二分查找.话不多说,让我们直接进入正题. 首先让我们了解下什么是二分查找法 基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较 ...

  2. C语言之二分查找法或折半查找法剖析(经典例题,经典解析)

    二分查找法(也叫折半查找法): 什么是二分查找? 具体查找的方式? 两种方法剖析 易错点列举 先举例题: int arr[]={1,2,3,4,5,6,7,8,9,10}; 找出7所在的位置. 分析之 ...

  3. c语言的二分查找,C语言二分查找法

    讲解对象:C语言二分查找法 作者:融水公子 rsgz 前提:必须是有序的数据 left=0;    middle=(left+right);    right=9; left>right  意味 ...

  4. 【经典排序算法】二分查找法 (动图演示 + C 语言代码实现)

    [经典排序算法]二分查找法 (动图演示 + C 语言代码实现)   

  5. c语言 二分查找法 及二分查找法的时间复杂度。

    二分查找法是用来查找数组中指定的那个元素.使用二分查找的前提是数组是有序的.(这里我们假设是升序) 在现实生活中,我们要猜一个区间内的数字,比如1~10之间,我们通常会猜它的中间数5,再根据要猜的数和 ...

  6. C语言中的二分查找法

    ...cpp 二分查找法也称折半查找法,是一种有序的查找方法,时间复杂度为log以2为底n的对数.如果是无序的则要先进行排序操作.基本思想是:把要查找的值和中间元素比较.例如在1 2 3 4 5 6 ...

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

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

  8. java算法2_二分查找法

    比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...

  9. LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根

    LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根 题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型 ...

最新文章

  1. jquery获取对象
  2. 【Flutter】如何写一个Flutter自动打包成iOS代码模块的脚本
  3. BugkuCTF–flag在index里
  4. Linux CentOS各大网站镜像资源地址展示,各种rpm资源包下载地址,rpm安装包大全
  5. 思考一个问题:如何重现主从备份失败的案例
  6. 手机自动化测试:appium源码分析之bootstrap十二
  7. homepod怎么设置为中文_设置 HomePod
  8. 7种方法让你养出干净的肺
  9. [数据库] ------ mysql规范
  10. 四天玩转windows phone开发视频之第二天总结
  11. 为安装有系统及应用程序的服务器更换硬盘方法一例
  12. 大数据学习菜鸟的Hadoop快速入门基础教程汇总详细解答
  13. shadowgun的飘扬旗帜shader
  14. 安徽师大附中%你赛day2T3 巧克力 解题报告
  15. linux man page
  16. 纯CSS实现三角形图标
  17. win11(amd)+cuda+cudnn+pytorch安装过程
  18. Neodynamic Barcode Professional for Windows Forms 14.0
  19. ubuntu20.04没有网易云音乐客户端解决办法
  20. 你真的了解DBA这份工作吗?

热门文章

  1. 阿里、百度、腾讯Java程序员面经(附带面试题答案)
  2. 正(斜)交平行投影变换矩阵
  3. 站长必懂!什么是CPM、CPC、CPA、CPR?
  4. 美团客户端面试题目记录_20210901
  5. 《江畔独步寻花》评课稿
  6. Flappy bird模式值得追捧么?
  7. 世界女性科技群落(三):全世界最幸福的地方,女性和科技的月之暗面
  8. IDEA 批量修改变量名、批量替换代码快捷键
  9. video全屏操作栏自定义样式js 指定元素全屏视频截图下载
  10. 迪克斯特拉算法——算法图解