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

简介: 如果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;
}
相关文章
|
6天前
|
前端开发 JavaScript 开发工具
震惊!前端小白到大神的蜕变之路,这些技巧你竟然还不知道?
前端开发是互联网技术的重要组成部分,从新手到大神需要掌握HTML、CSS和JavaScript的基础知识,熟练使用框架和工具,如React、Vue和Git,并注重性能优化。持续学习和实践是成长的关键。本文分享了一些实用技巧,帮助你在前端开发之路上快速进步。
16 4
|
18天前
|
算法 开发者
技术之路:从迷茫到坚定的探索之旅
在技术的海洋中,每个人都是一艘小船,面对着波涛汹涌的挑战和未知的风浪。本文通过个人的技术成长经历,探讨了如何在不断变化的技术环境中找到自己的方向,以及如何通过持续学习和实践来克服困难,最终实现自我超越。
|
28天前
|
人工智能 前端开发 数据挖掘
技术之旅:从迷茫到探索的蜕变
【10月更文挑战第15天】 本文通过个人经历,探讨了技术学习过程中的常见挑战和解决策略。文章以作者自身从大学毕业生到技术领域专家的成长历程为例,展示了持续学习和实践的重要性。通过具体案例分析,本文旨在启发读者在面对技术挑战时,如何保持积极态度,寻找有效的学习方法,并最终实现自我超越。
|
2月前
|
算法 安全 小程序
编程之旅:从小白到专家的蜕变之路
【9月更文挑战第8天】本文是一篇个人技术成长历程的分享,通过作者的亲身经历,展示了一个编程新手如何逐步成长为一名技术专家。文章不仅包含了编程学习的心得体会,还探讨了持续学习、实践和社区参与对于技术提升的重要性。适合所有对编程感兴趣的读者,尤其是那些正在寻找学习路线和动力的初学者。
54 7
|
6月前
技术之路:披荆斩棘,不负初心
在这充满变革与挑战的时代,每一个技术工作者都在不断前行,面对困难与挑战,保持初心,才能在技术之路上披荆斩棘,终有所成。
39 1
|
人工智能 搜索推荐
走进AGIC《看见新力量(第七期)》
前言:AGIC是什么?它对我们的生活有什么影响,本期文章带领大家走进AGIC,领略新时代新力量~
203 1
|
人工智能 Cloud Native 物联网
《看见新力量》第二期免费下载! 带你走进数十位科技创业者背后的故事
这是一本正在进行中的科技创业者的记录,书中涉及的创业者还都奔跑在路上。然而,他们的所思所做,已足以令一些产业发生微小而有效的变化,令数字经济时代下人们的生活变得更加智能。阿里云创新中心作为科技创业者坚定的陪伴者,希望能够通过记录的方式,让大家听到创业者真实的声音,看见科技创新的力量。
26222 0
《看见新力量》第二期免费下载! 带你走进数十位科技创业者背后的故事
|
新零售 Java 应用服务中间件
毕玄:我在阿里的十年技术感悟
在阿里,我们习惯尊称毕玄老师为“毕大师”。他2007年加入阿里,一手打造了HSF,十多年来更见证、参与了阿里在基础技术上的演进与发展:如淘宝在2007-2009年的分布式应用架构升级、2013-2016年的阿里电商异地多活架构升级等。但很少有人知道,他大学读的是生物专业。
13329 0