小白的崛起之路——每日一记

简介: 如果arr[mid]是小于key,那说明key还在右边这时数据范围就缩小到[mid+1,right],(mid为什么要加一呢?因为mid所占的数据不符所以要加一缩小范围)。也就是把mid+1的值赋给了left;然后再算出mid值进行查找,如果下一次arr[mid]==key 那恭喜找到了,否则继续进行以上操作,也就可以放进一个循环中,当[left,right]区间不断缩小里面的元素也就不断减小,直到元素没有为止循环停止。这时如果left大于right说明这个序列中没有想要找的元素key。

方法:二分法    题目 :编写代码在一个整形有序数组中查找具体的某个数            


                         要求:找到了就打印数字所在的下标,找不到则输出:找不到。


对于查找一个数字,首先肯定会想到把这些数字全部找一遍,而这样不仅费时又费力,这时二分法的好处就体现出来了。什么是二分法呢?,在数学中就是对于区间[ a , b ]上连续不断且f(a)·f(b)<0的函数y=f(x)。通过连续不断的把零点所在区间一分为二,不断缩小范围,使两个端点逐步逼近零点,进而得到近似于零点的值方法叫做二分法。


而在c语言中二分法适用于当数据量很大,并且是有序序列中。


什么原理呢。设置一个arr数组来存放数列,定义三个变量,left(left为最左边的下标), right(left为最右边的下标), mid(mid为左右下标的中间值mid=left+(right-left)/2),如果比如这个序列为1,2,3,4,5,6,7,8,9,10;你想找到一个数key=7;


如果arr[mid]是小于key,那说明key还在右边这时数据范围就缩小到[mid+1,right],(mid为什么要加一呢?因为mid所占的数据不符所以要加一缩小范围)。也就是把mid+1的值赋给了left;然后再算出mid值进行查找,如果下一次arr[mid]==key 那恭喜找到了,否则继续进行以上操作,也就可以放进一个循环中,当[left,right]区间不断缩小里面的元素也就不断减小,直到元素没有为止循环停止。这时如果left大于right说明这个序列中没有想要找的元素key。


如果arr[mid]是大于key,那说明key还在左边这时候数据范围就缩小到[right,mid-1]也就是把mid-1的值赋给了right。(道理如上)


#include <stdio.h>
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int left = 0;
    int right = sizeof(arr) / sizeof(arr[0]) - 1;
    int key = 7;
    while (left <= right)//判断left和right之间还有没有元素在,
        //否则继续,直到区间中没有元素时,说明key不在集合中,打印找不到
    {
        int mid = left + (right - left) / 2;/
        if (arr[mid] < key)
            left = mid + 1;
        else if (arr[mid] > key)
            right = mid - 1;
        else
        {
            printf("%d", mid);
            break;
        }
    }
    if (left > right)
    {
        printf("找不到了");
    }
    return 0;
}
相关文章
|
3月前
技术之路:披荆斩棘,不负初心
在这充满变革与挑战的时代,每一个技术工作者都在不断前行,面对困难与挑战,保持初心,才能在技术之路上披荆斩棘,终有所成。
23 1
|
设计模式 算法 小程序
新晋奶爸,在技术路上不断前进 |2021 年中总结
新晋奶爸,在技术路上不断前进 |2021 年中总结
266 0
新晋奶爸,在技术路上不断前进 |2021 年中总结
|
Web App开发 存储 移动开发
我的前端成长之路:在阿里七年,我的成长和迷茫
很荣幸有这个机会和大家分享一下我的成长经历,以及我是如何摆脱业务前端的职业迷茫感的。
我的前端成长之路:在阿里七年,我的成长和迷茫
阿里技术女神的成长之路(有生活素颜照哦)
从入职到现在2年多的时间里,经常有人问起:为什么要做程序员?为什么要来阿里? 这里不聊技术,不聊项目,只是简单分享,邻家女孩初长成,一路走来的风景……
42983 0
|
新零售 Java 应用服务中间件
毕玄:我在阿里的十年技术感悟
在阿里,我们习惯尊称毕玄老师为“毕大师”。他2007年加入阿里,一手打造了HSF,十多年来更见证、参与了阿里在基础技术上的演进与发展:如淘宝在2007-2009年的分布式应用架构升级、2013-2016年的阿里电商异地多活架构升级等。但很少有人知道,他大学读的是生物专业。
13059 0
|
算法 大数据 云计算
学生党如何从零开始,成为云计算牛人,步入IT大厂或成就个人事业?
这是一篇纯干货分享帖,不谈个人经验,只搬运牛人的技术“方案”。 第一步,你要深入的了解云计算是什么? 云计算从入门到实践之视频课程 贴上此课程的前几章,也许你能更好的了解从何学起。
67192 0
|
关系型数据库 Linux 数据库
享受“折磨”——阿里专家铁庵十余年技术之路的思考与感悟
入职阿里云刚刚过了1000天,每天忙碌在产品及项目工作中时,有时也会疲惫。然而,每当想起自己的初心和理想,还有家人的支持,一切随即化作无限的幸福。
11328 0
转行之路—心路历程(一)
转行之路伊始的心路历程
1982 0