c语言实现二分查找法
目录
一.前言
二.二分查找法
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语言实现二分查找法相关推荐
- 通过C语言实现二分查找法
Hellow,我是jack,今天给大家分享的是C语言实现二分查找.话不多说,让我们直接进入正题. 首先让我们了解下什么是二分查找法 基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较 ...
- C语言之二分查找法或折半查找法剖析(经典例题,经典解析)
二分查找法(也叫折半查找法): 什么是二分查找? 具体查找的方式? 两种方法剖析 易错点列举 先举例题: int arr[]={1,2,3,4,5,6,7,8,9,10}; 找出7所在的位置. 分析之 ...
- c语言的二分查找,C语言二分查找法
讲解对象:C语言二分查找法 作者:融水公子 rsgz 前提:必须是有序的数据 left=0; middle=(left+right); right=9; left>right 意味 ...
- 【经典排序算法】二分查找法 (动图演示 + C 语言代码实现)
[经典排序算法]二分查找法 (动图演示 + C 语言代码实现)
- c语言 二分查找法 及二分查找法的时间复杂度。
二分查找法是用来查找数组中指定的那个元素.使用二分查找的前提是数组是有序的.(这里我们假设是升序) 在现实生活中,我们要猜一个区间内的数字,比如1~10之间,我们通常会猜它的中间数5,再根据要猜的数和 ...
- C语言中的二分查找法
...cpp 二分查找法也称折半查找法,是一种有序的查找方法,时间复杂度为log以2为底n的对数.如果是无序的则要先进行排序操作.基本思想是:把要查找的值和中间元素比较.例如在1 2 3 4 5 6 ...
- java 二分查找_计算机入门必备算法——二分查找法
1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...
- java算法2_二分查找法
比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...
- LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根
LeetCode 69. x 的平方根:二分查找法实现自定义的函数:x 的平方根 题目描述 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型 ...
最新文章
- jquery获取对象
- 【Flutter】如何写一个Flutter自动打包成iOS代码模块的脚本
- BugkuCTF–flag在index里
- Linux CentOS各大网站镜像资源地址展示,各种rpm资源包下载地址,rpm安装包大全
- 思考一个问题:如何重现主从备份失败的案例
- 手机自动化测试:appium源码分析之bootstrap十二
- homepod怎么设置为中文_设置 HomePod
- 7种方法让你养出干净的肺
- [数据库] ------ mysql规范
- 四天玩转windows phone开发视频之第二天总结
- 为安装有系统及应用程序的服务器更换硬盘方法一例
- 大数据学习菜鸟的Hadoop快速入门基础教程汇总详细解答
- shadowgun的飘扬旗帜shader
- 安徽师大附中%你赛day2T3 巧克力 解题报告
- linux man page
- 纯CSS实现三角形图标
- win11(amd)+cuda+cudnn+pytorch安装过程
- Neodynamic Barcode Professional for Windows Forms 14.0
- ubuntu20.04没有网易云音乐客户端解决办法
- 你真的了解DBA这份工作吗?