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

简介: 如果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;
}
相关文章
|
缓存 JavaScript
不负青春,砥砺前行,VueAdminWork—2.0与您继续同行,众多实用功能等您而来
不负青春,砥砺前行,VueAdminWork—2.0与您继续同行,众多实用功能等您而来
不负青春,砥砺前行,VueAdminWork—2.0与您继续同行,众多实用功能等您而来
|
存储 弹性计算 分布式计算
科普达人丨一文弄懂什么是云计算?
云计算的定义、分类,以及发展历程。
科普达人丨一文弄懂什么是云计算?
|
设计模式 算法 小程序
新晋奶爸,在技术路上不断前进 |2021 年中总结
新晋奶爸,在技术路上不断前进 |2021 年中总结
245 0
新晋奶爸,在技术路上不断前进 |2021 年中总结
|
Web App开发 存储 移动开发
我的前端成长之路:在阿里七年,我的成长和迷茫
很荣幸有这个机会和大家分享一下我的成长经历,以及我是如何摆脱业务前端的职业迷茫感的。
我的前端成长之路:在阿里七年,我的成长和迷茫
|
关系型数据库 Linux 数据库
享受“折磨”——阿里专家铁庵十余年技术之路的思考与感悟
入职阿里云刚刚过了1000天,每天忙碌在产品及项目工作中时,有时也会疲惫。然而,每当想起自己的初心和理想,还有家人的支持,一切随即化作无限的幸福。
11269 0
|
算法 前端开发 Java
技术超神之路
在江湖中要练就绝世武功必须内外兼备,需要精妙的招式和深厚的内功,武功的基础是内功。对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后,内功就更主要了。
1332 0