目录

一.前言

二.二分查找法

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. debian 10 ssh简单配置
  2. 环形动画加载视图AnimatedCircleLoadingView​​​​​​​
  3. 46. AngularJS所有版本下载
  4. [NOI2012]骑行川藏
  5. C#使用SQL语句时候的万用密码问题
  6. 神秘的“阿里星”是一群怎么样的人
  7. c++ map iterator 获取key_JAVA | Map集合使用详解
  8. ztree 点击重载 layui table
  9. edite not the main type
  10. A CAPTCHA Server Control for ASP.NET C# 版
  11. CV学习笔记(六):均值滤波与高斯滤波
  12. python实现给定一个字符串,寻找最长非重复子串
  13. 验证性因素分析AVE和CR值
  14. word使用上角标超链接到引用的参考论文
  15. sharp计算机按钮配置,将Sharp TV HDMI接口连接到计算机并设置教程
  16. Spring Boot 错误页面解析原理(超级无敌详细)
  17. dPCA 二面角主成分分析
  18. e575 viminfo 错误.
  19. SSM项目之注册页面知识点整理
  20. 算法设计与分析:分治法输出数字旋转方阵

热门文章

  1. 刷机相关的Android的安全
  2. 《被讨厌的勇气》- 一切烦恼都来自人际关系
  3. 管理员权限功能和开机自启功能
  4. QT应用编程: 编写MQTT客户端登录OnetNet服务器完成主题订阅与发布
  5. 20171225 股票操作日志
  6. 五菱的“世界上最有名的颜色”系列海报,太令人上头了
  7. “朱坚强”答记者问(转)
  8. 亚马逊重组游戏开发部门:数个未发布游戏被“扼杀”;台积电明年开始为苹果iPhone生产5nm处理器……...
  9. Lightly:新一代的 Go IDE
  10. LeetCode | 0017. Letter Combinations of a Phone Number电话号码的字母组合【Python】