C语言:二分法查找

2023-11-18

什么是二分法查找?

二分法查找是通过循环平分的方式,来进行查找想要的数或数据。

那么,要怎么编写这样的代码呢?

首先,要把一系列的数组存入变量当中去,将其当成已知数据。比如将1~10十个数字存到变量中去,就可以写成:

然后就要知道,查找数据是通过下标实现查找的。

这个时候就可以定义变量,通过控制变量进而控制下标的变换,就比如可以这样定义:

因为存入的是十个数字,第一个数字的下标是1,第十个数字的下标正好是9,所以定义left = 0;right = 9 。

然后就是二分法来缩小范围,先收尾相加除以2定义为中间变量,例如:

再通过看中间变量和输入数字的位置关系,确定中间变量是要赋值给 left 还是赋值给 right 。这个时候就可以使用 if 语句进行判定了。

同时,要记得,如果赋值给 left 的话,应该加1再赋值到left,因为刚才已经判定了中间变量与输入数字的位置关系,可以确定输入数字是不包括中间变量的,因此中间变量加1在不违反所要结果的同时,进一步缩小了范围,提高了代码运行速率。

同理可得,如果赋值给right的话,应该减1再赋值到right。

例如:

 

最后,就是将代码合并起来,所以,二分法找下标的完整代码:

对此,还可以对这个代码进一步推广,比如,可以用循环将数字个数存入数组中,这样存入的数字就不限于10个数字,推广到可以存入尽可能多的数字;找下标也可以推广到通过这个下标进而在这个数组中找到其中的数字。

但是,这样推广后就会存在一个问题:right 是要知道数组中最后一个数字的下标,才能够进行的,如果推广到数组中有很多个数字,以至于在短时间内很难去确定其下标,那 right 又应该如何赋值呢?

如上图所示,可以将数组的总长度除以每个数字的长度,就可以知道总共有多少个数字。然后就可以赋值给 right 。

 

 注意在赋值给 right 的时候,需要先减1再赋值,因为数字总比下标大1。

这样,就可以完成二分法查找的整个过程了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言:二分法查找 的相关文章

随机推荐

  • 性能测试入门——完整的测试流程

    性能测试一般的压测流程 需求收集 测试准备 测试执行 结果分析与调优 测试报告与总结 1 1 需求收集 性能测试需求一般在项目需求阶段就可以收集 测试人员进入项目应尽快开展此项活动 1 性能需求的来源 需求文档 问卷调查 历史数据统计分析等
  • Vue的用途

    我使用Vue和React已经很长一段时间了 两个框架上实践代码量都在10万行以上 不得不说都是都很不错的 帮助开发者减少很多工作量 某种框架是现代化Vue和React在两者之间的选择并不像选择苹果或香蕉一样简单 两者在工程实践上的差异让我们
  • Eclipse下启动tomcat报错:/bin/tool.jar which is referenced by the classpath, does not exist.

    1 错误 在Eclipse下启动tomcat的时候 报错为 Eclipse下启动tomcat报错 The archive D Program Files Java jdk1 7 0 10 lib tools jar which is ref
  • python后端学习(八)网络通信

    TCP IP 为了把全世界的所有不同类型的计算机都连接起来 就必须规定一套全球通用的协议 为了实现互联网这个目标 互联网协议族 Internet Protocol Suite 就是通用协议标准 因为互联网协议包含了上百种协议标准 但是最重要
  • (转)那些年不容错过的硅谷IT公司

    来源 https zhuanlan zhihu com p 20677434 那些年不容错过的硅谷IT公司 Mingche SuMingche Su 1 年前2016 年 3月 27 日星期日下午 12 点 34 分 1 Houzz 是一个
  • 解决MySQL installation error : Initializing Database安装MySQL提示initialize database报错

    解决MySQL installation error Initializing Database安装MySQL提示initialize database报错 当我们在安装MySQL数据库时 在 Initializing Database 就
  • C语言之——快速排序qsort库函数的讲解

    qsort函数C语言编译器函数库自带的排序函数 也叫快速排序函数 之前我写过一篇关于冒泡排序的代码讲解 大家感兴趣的话可以先看一看我对于冒泡排序的讲解 相比较于冒泡排序 快速排序可以用更加快捷的速度去排列升降序 它的时间复杂度只有O N l
  • 使用Vue+elementUI实现CRUD

    文章目录 前言 一 简介 二 使用Vue Cli搭建Vue项目 1 vue cli 介绍 2 axios js 介绍 3 Element Ul 介绍 4 moment js 介绍 5 搭建项目 6 添加main js配置 7 修改App v
  • Dockerfile07 -- Dockerfile构建python

    文章目录 一 Dockerfile搭建python 1 创建python目录 2 编写dockerfile文件 3 修改网站内容 一 Dockerfile搭建python 1 创建python目录 2 编写Dockerfile python
  • Wifi隔离 (AP隔离)的原理及实现

    1 wifi隔离是什么 无线隔离又称客户端隔离 client isolation 也称AP隔离 指的是阻止连接路由器的设备之间互相访问 多见于无线通信方面 常见于路由器设置中 AP隔离非常类似有线网络的VLAN 虚拟局域网 将所有的无线客户
  • 大数据—— Flink 的优化

    目录 一 Flink内存优化 1 1 Flink 内存配置 二 配置进程参数 2 1 场景 2 2 操作步骤 三 解决数据倾斜 3 1 场景描述 3 2 解决方式 3 2 1 数据源的消费不均匀 调整并发度 3 2 2 数据分布不均匀 四
  • C++11智能指针(unique_ptr、shared_ptr、weak_ptr)boost::scoped_ptr

    C 11智能指针 unique ptr shared ptr weak ptr 码农小非 的专栏 CSDN博客 c shared ptr weak ptr 原创 智能指针拾遗 原创 智能指针拾遗 qicosmos 江南 博客园 shared
  • java - 异常和断言

    什么是异常 异常就是指在程序运行的过程中发生一些不正常的时间 除0溢出 数组下标越界 所要读取的文件不存在 java的异常是Throwable派生类的一个实例 Throwable类包含在java lang中 Error类 LinkageEr
  • 论文学习笔记(7):Teacher Guided Neural Architecture Search for Face Recognition

    目录 摘要 一 介绍 二 相关工作 三 研究方法 3 1 知识蒸馏 3 2 教师网络指导下的神经网络架构搜索 3 2 1 搜索宽度 3 2 2 搜索深度 3 2 3 搜索目标 四 实验 4 1 数据集 来自AAAI2021 文章链接 htt
  • Python 类与对象、模块、异常

    类内置方法 模块 是将一组函数放在一起共享公共的主题 将其存储在一个 py文件中 使用import命令导入 Python3中部分函数 异常捕捉 try fh open testfile W fh write This is a testfi
  • Kali Linux中英文切换

    Kali linux默认为英语 可以执行以下命令切换为中文 echo LANG zh CN UTF 8 gt etc default locale 切换好 执行 reboot 重启即可 同理 切换为英文 echo LANG en US UT
  • 2022-渗透测试-OWASP TOP10详细讲解

    1 sql注入 原理 SQL 注入就是指 web 应用程序对用户输入的数据合法性没有过滤或者是判断 前端传入的参数是攻击者可以控制 并且参数带入数据库的查询 攻击者可以通过构造恶意的 sql 语句来实现对数据库的任意操作 分类 1 报错注入
  • 发小要开商场,让我给写个商场管理系统。报酬就去唱个歌?

    前言 昨天我发小喊我去唱歌 我心想还有这种好事 这铁公鸡平常一毛不拔的 居然还请我唱有陪唱的 那这咱们就拒绝不了啊 刀山火海这都得上啊 话说今天陪唱的小姐姐长的确实还不错 唱了两个小时 发小做我旁边让我帮个忙 我就知道他是无事献殷勤 那没办
  • Java-集合(List接口及其常用的实现子类)

    List接口基本介绍 1 List集合类中元素是有序的 即添加顺序和取出顺序一致 且可以重复 2 List集合类中的每个元素都有其对应的顺序索引 即支持索引 3 List容器中的元素对应一个整数型的序号 记载其在容器中的索引位置 可以根据序
  • C语言:二分法查找

    什么是二分法查找 二分法查找是通过循环平分的方式 来进行查找想要的数或数据 那么 要怎么编写这样的代码呢 首先 要把一系列的数组存入变量当中去 将其当成已知数据 比如将1 10十个数字存到变量中去 就可以写成 然后就要知道 查找数据是通过下