二分算法简单介绍

2023-05-16

        二分算法,顾名思义 就是把一组有序数据的搜索区域缩小一半。下面给大家举例说明一下 如何确定被缩小的搜索区间。

原理分析

拿一个有序的整形数组来举例 int a[10]={1,2,3,4,5,6,7,8,9,10},在初始算法的时候 应该确定左端点low,右端点high以及(mid=(low+high)/2)要搜索的目标值key,这里的左端点就是a[0],右端点为a[9],key为 a[6]。
开始运算时,第一次的a[mid]<a[key]所以应该舍去的搜索区域为a[0]到a[mid]即high=mid+1,所以此时的搜索区域为a[mid+1]–a[right],第二次运算时mid还是等于low+right)/2,此时的a[mid]>a[key],同理应该使a[high]=mid-1,以此类推。算法结束的条件为a[mid]==a[key]或者时low>high,即搜索区域为空时。
**

时间复杂度为

比如:总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。
由于n/2k取整后>=1,即令n/2k=1,
可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以简单理解为O()=O(logn)。
**

代码实现

#include <stdio.h>
int binary_search(int key,int a[],int n) //自定义函数binary_search()
{
    int low,high,mid,count=0,count1=0;
    low=0;
    high=n-1;
    while(low<high)    //査找范围不为0时执行循环体语句
    {
        count++;    //count记录査找次数
        mid=(low+high)/2;    //求中间位置
        if(key<a[mid])    //key小于中间值时
            high=mid-1;    //确定左子表范围
        else if(key>a[mid])    //key 大于中间值时
            low=mid+1;    //确定右子表范围
        else if(key==a[mid])    //当key等于中间值时,证明查找成功
        {
            printf("查找成功!\n 查找 %d 次!a[%d]=%d",count,mid,key);    //输出査找次数及所査找元素在数组中的位置
            count1++;    //count1记录查找成功次数
            break;
        }
    }
    if(count1==0)    //判断是否查找失敗
        printf("查找失敗!");    //査找失敗输出no found
    return 0;
}

int main()
{
    int i,key,a[100],n;
    printf("请输入数组的长度:\n");
    scanf("%d",&n);    //输入数组元素个数
    printf("请输入数组元素:\n");
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);    //输入有序数列到数组a中
    printf("请输入你想查找的元素:\n");
    scanf("%d",&key);    //输入要^找的关键字
    binary_search(key,a,n);    //调用自定义函数
    printf("\n");
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二分算法简单介绍 的相关文章

  • java获取字符串最后一个字符

    第一种 String str 61 34 daipogfhjoripa1 34 char c 61 str charAt str length 1 第二种 str substring str length 1
  • 解决idea中maven依赖unknown的问题

    解决idea中maven依赖unknown的问题 1 出现问题原因 xff1a 最简单的原因是 xff0c 包名之间的横线 中英文切换问题 xff0c 改正就好 xff0c 或者忘记写版本号 从其他地方copy过来的 xff0c 仓库下载失
  • mySql中count带条件查询

    方法一 xff1a SELECT count t command name 61 39 UNLOCK 39 OR NULL unlockFrequency FROM 表 t 方法二 xff1a select count t command
  • tomcat下载安装步骤(超详细)

    下载安装 首先进入tomcat官网 https tomcat apache org 在圈住的位置点击下载自己想要的版本 我选择tomcat9 根据自己电脑下载64位或32位zip版本 下载完毕后解压到自己想放的位置 配置环境变量 在系统变量
  • 关于springboot访问tomcat,线程http-nio-8080-exec的来源问题

    最近在看并发操作时候 xff0c 例如jmeter进行接口压测 xff08 本地自己的springboot2的环境 xff09 xff0c 发现一个有趣的现象 xff0c 就是关于线程http nio 8080 exec 1 xff0c h
  • Docker容器的创建、启动、和停止及删除

    前言 xff1a 名词解释 这里有两个不同的单词 xff0c images和container 其中images很好理解 xff0c 跟平常使用的虚拟机的镜像一个意思 xff0c 相当于一个模版 xff0c 而container则是imag
  • Redis修改密码

    Redis修改密码 一开始自己使用redis一直没有使用密码 xff0c 后来在项目中要求配置密码 xff0c 每次都是在命令中修改 xff0c 单重启后悔失效 后来通过配置文件 xff0c 但重启后总是不生效 xff0c 试了好几种方法都
  • @ApiModel 和 @ApiModelProperty

    64 ApiModel 使用场景 xff1a 在实体类上边使用 xff0c 标记类时swagger的解析类 1 什么是Swagger OpenAPI规范 xff08 OpenAPI Specification 简称OAS xff09 是Li
  • MySQL_基本的SELECT语句

    目录 SQL概念 xff1a SQL分类 xff1a SQL语言的规则与规范 xff1a SELECT的基本语句 我是ZGB xff0c Java领域新星创作者 xff0c 阿里云专家博主 xff0c 华为云 云享专家博主 xff0c 热衷
  • springcloud之gateway服务网关

    目录 微服务中网关的作用 gateway 与 zuul springcloud gateway 简介 相关概念 工作流程 特征 快速上手 Maven 依赖 application properties 配置文件 启动类 eureka cli
  • 4438无线网络组网代码解析

    device bind process 是怎么实现绑定的 xff1f enum NOSTATE UBIND 等待接收 握手一次1 WAIT FOR TOUCH WAIT FOR CONFIRM 点击按键后 回复一次2 BIND SUCCES
  • python—函数

    函数 定义和注意事项 将可能需要反复执行的代码封装为函数 xff0c 并在需要该功能的地方进行调用 xff0c 不仅可以实现代码复用 xff0c 更重要的是可以保证代码的一致性 xff0c 只需要修改该函数代码则所有调用均受到影响 设计函数
  • ROS安装gazebo教程及报错解决,并基于gazebo仿真环境实现机器人在复杂路径下自动导航(更新中)

    安装教程 xff1a 教程 70分钟入门gazebo 报错一 xff1a E Could not get lock var lib dpkg lock frontend open 11 Resource temporarily unavai
  • UCOSIII-消息队列

    目录 1 简介 1 1消息队列 xff08 异步通信方式 xff09 1 2消息池 2 结构体 2 1消息元素os msg 2 2消息池元素osmsgpool 全局变量 2 3消息队列结构体OS Q 2 4消息列表结构体OS MSG Q 3
  • 利用Nodemcu+Arduino nano+TB6612+点灯科技APP制作简易麦克纳姆轮Wi-Fi遥控小车

    摘要 麦克纳姆轮小车由于车轮本身的特殊结构 xff0c 可以实现全向行驶 xff0c 可玩性非常强 麦克纳姆轮原理在这里不做展开 xff0c 麦克纳姆小车主要是通过控制四个轮胎的转与不转以及转动的方向来实现多方向的运动 xff0c 其中一种
  • Collecting package metadata (current_repodata.json): fail亲测成功

    在Ubantu中创建anaconda虚拟环境时报错 xff1a Collecting package metadata current repodata json failed ProxyError Conda cannot proceed
  • Vue----模板渲染语法中使用JavaScript表达式

    文章目录 3 5 模板渲染语法中使用JavaScript表达式 3 5 模板渲染语法中使用JavaScript表达式 在vue提供的模板渲染语法中 xff0c 除了支持绑定简单的数据值外 xff0c 还支持JavaScript表达式运算 用
  • 树莓派下载Ubuntu20.04.3版本 +通过设置找到wifi标志+开启vnc远程桌面+灰屏解决方法

    貌似从19版本开始就下完之后右上角没有出现wifi标志 xff0c 在csdn上也十分难找到方法 xff0c 对于网线直连的 csdn上是有十分多的方法的 xff0c 大家可以去找找看 但是对于一开始就连wifi的方法似乎特别少 xff0c
  • 字符数组和字符串数组中的‘\0‘尾零存在的问题

    一 在字符和字符串中是否必须存在 答 xff1a 在字符数组中非必要存在 xff0c 但是在字符串数组中定义的时候必须存在 字符数组 1 并不要求它的最后一个字符为 39 0 39 xff0c 甚至可以不包括 39 0 39 xff0c 像

随机推荐

  • FreeRTOS学习笔记一

    FreeRTOS 任务不允许以任何方式从实现函数中返回 它们绝不能有一条 return 语句 void ATaskFunction void pvParameters int iVariableExample 61 0 for 传入NULL
  • css实现loading效果

    主要利用css3特性 xff0c 以及伪元素的使用实现此功能 lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta http equ
  • ros学习记录:Gazebo加载速度慢,长时间停在“Preparing your world”

    前言 ros学习记录笔记 xff0c 一个小白的自留地 xff0c 欢迎大佬批评指正 一 问题描述 Gazebo加载速度慢 xff0c 长时间停在 Preparing your world 二 解决办法 1 下载模型到根文件下的 gazeb
  • ROS坐标系统,常见的坐标系和其含义

    摘自 xff1a ros基础必看之各个frame的理解 黑猫爱小鹿的博客 CSDN博客 文章目录 常见的坐标系坐标系的约定坐标系变换的计算Map之间的切换添加 ros中常见的坐标系 转载链接 1 1 现在小车进行移动 1 2 如图 1 2
  • 运行roscore报错解决(重装ROS)

    前言 一个小白的自留地 xff0c 欢迎大佬批评指正 运行roscore出现如下错误 WARNING unable to configure logging No log files will be generated Checking l
  • keil5出现‘Target not created‘

    keil5出现 Target not created 新建工程中写了main函数进行编译时出现错误的问题 xff1a Using Compiler 39 V5 06 update 5 build 528 39 folder 39 D Kei
  • 2 常见模块库(2)

    2 5 复用器与分路器模块 Mux是一种用于将多个信号组合成一个信号的模块 Mux模块的名称来源于多路复用器 xff08 Multiplexer xff09 使用Mux可以将多个输入信号组合成一个向量或矩阵 xff0c 以便在模型中传递和处
  • 8 DWA(一)

    8 DWA DMA简介 DMA xff08 Direct Memory Access xff09 直接存储器存取 xff08 可以直接访问32内部存储器 xff0c 包括内存SRAM xff0c Flash xff09 DMA可以提供外设和
  • 9 串口通信(一)

    9 串口通信 通信接口 通信的目的 xff1a 将一个设备的数据传送到另一个设备 xff0c 扩展硬件系统 通信协议 xff1a 制定通信的规则 xff0c 通信双方按照协议规则进行数据收发 名称引脚双工时钟电平设备USARTTX RX全双
  • 9 串口通信(二)

    函数介绍 xff1a span class token comment init三剑客 span span class token keyword void span span class token function USART DeIn
  • 3 连续模块(二)

    3 5 零极点增益模块 在控制系统设计和分析中 xff0c 常用的函数包括 传递函数 xff08 tf xff09 零极点 xff08 zpk xff09 和状态空间 xff08 ss xff09 函数 传递函数 xff08 tf xff0
  • Android packageManagerService如何添加安装权限白名单

    https blog csdn net myvest article details 54344076
  • 4 非线性模块库(二)

    4 4 量化模块及归零模块 1 xff09 Quantizer 在Simulink中 xff0c Quantizer xff08 量化器 xff09 模块是一种数学运算模块 xff0c 用于将连续信号离散化为多级离散值 xff0c 具有模拟
  • TRIZ创新方法——技术系统进化趋势

    技术系统进化趋势 技术系统及进化趋势S曲线法则技术系统的S曲线产品的进化曲线 八大技术系统进化法则 xff08 1 xff09 完备性法则 xff08 2 xff09 能量传递法则 xff08 3 xff09 协调性进化法则 xff08 4
  • 英特尔 NUC X15 笔记本 评测 英特尔上架新款 NUC X15 笔记本参数配置

    配置方面 xff0c 这款笔记本搭载了 i7 12700H 处理器 xff0c 14 核 20 线程 xff0c 睿频可达 4 7GHz 显卡为英特尔锐炫 A730M xff0c 搭载 24 个 Xe 内核 xff0c 拥有 12GB 19
  • vs2019未能正确加载解决方案的项目

    网上朋友们说是路径出了问题 xff0c 需要修改 vcxproj文件的内容 xff0c 我试了一下没成功 最后发现 xff0c 所以打不开 xff0c 是因为我下载了别人的项目 xff0c 用解压软件解压后直接打开了 sln 当我把解压后的
  • 自我提升解决bug的能力(一)

    我和大家分享一个我的自我提升解决bug的能力 满满的干货 一名优秀的程序员会具备较强解决bug的能力 如果你觉得自己不够优秀 xff0c 解决bug能力不足 xff0c 学习处于被动的状态 那我要大声的告诉你请不要迷茫 xff0c 陷入低沉
  • 论文笔记:VIBE: Video Inference for Human Body Pose and Shape Estimation

    要解决的问题 有3D关键点标注的数据集太少 xff0c 所以我们想生成这样的数据集 所以我们提出了一个 利用视频进行动作估计的新方法 xff0c 解决了数据集缺乏和预测准确率不佳的问题 主要创新点 利用 对抗式生成网络 来区分 真实人类动作
  • 2022年春招实习十四面(嵌入式面经)(已完结)

    文章目录 前言CVTE xff08 嵌入式软件 xff09 CVTE一面 xff08 嵌入式软件开发 xff09 时长 xff1a 50分钟CVTE二面 xff08 55分钟 xff09 阿里菜鸟网络 xff08 嵌入式软件 xff09 阿
  • 二分算法简单介绍

    二分算法 xff0c 顾名思义 就是把一组有序数据的搜索区域缩小一半 下面给大家举例说明一下 如何确定被缩小的搜索区间 原理分析 拿一个有序的整形数组来举例 int a 10 61 1 2 3 4 5 6 7 8 9 10 xff0c 在初