假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用”1,2,3,4,5,6,7,8,9″这九个数组成的数组来说,假如我们想寻找’2’,那很简单我们只用从小到大开始寻找,寻找两次就完成了,但是我们想寻找’一元二次方程式;7’,我们继续用从小变速运动到大挨个寻找,这就显得有点慢并且耗时长还没有效率,因此我们可以有一种全新的方法,二分查找法来解决这个问题。
二分查找法,又叫做折半查找法,它是一种效率较高的查找方法。但是,折普通高中学业水平考试半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。就用刚刚的数组来说,我们想寻找’7’,很简单我们先用7和数组中间的数来比较大小,很明显7大于,所以我们缩小范围,从中间的右边开始继续取中间值,继续寻找,直到找到位置,这样一看找的次数少了很多,而且速度也快了不少。
咱们来分析一下刚刚我说的找数字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;}el if (arr[mid再教育] < key){left = mid + 1;}el{printf("找到了,对应的下标为:%d\n", mid);break;}}if (left > ri文具盒英语怎么读ght){printf("找不到\n");}}
最后运行
关于上面的过程,我们不难发现二分查找法虽然很快,但是有两个很明显的缺点,一个是他实现的条件必须是一个有序的数列,另外一个是他只能一次性找一个数而不是多个,这就让他有了很多局限性。二分查找有个很重要的特点,就是不会查找数列的全部元素,而查找的数据量其实正好符合元素的对数,正常情况下每次查找的元素都在一半一半地减少。所以二分查找的时间复杂度为
log2o是毫无疑问的。
到此这篇关于c语言实现二分查找法的文章就介绍到这了,更多相关c语言二分查找法内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 15:50:16,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/224d8265000ba7fce825eea8f8b67dfe.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:用C语言实现二分查找算法.doc
本文 PDF 下载地址:用C语言实现二分查找算法.pdf
留言与评论(共有 0 条评论) |