基础算法二分查找c语言

2023-10-31

>大家有没有玩过猜数字游戏,你猜一个数就说你猜大了还是猜小了,猜正确就结束,你是怎么猜呢?不会从头到末尾一个一个猜吧。我们先找中间的数猜一次缩减一半的范围。

在 1 2 3 4 5 6 7 8 9 10 查找7 和 17
1.把数据存放在数组中并且把7和17分两次需要输入的k值定义并且接受
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k;
scanf("%d", &k);
2.找出数组两边的下标
1>计算数组长度
int sz = sizeof(arr) / sizeof(arr[0]);
2>
int left = 0;
int right = sz - 1;
3.在数组中查找是否有k
 1>先找到中间的数字下标,若不能整除向下约分
 int mid = (left + right) / 2;
 2>用数组中间元素与要找的k进行比较
 (1)若arr[mid]<k  则k在arr[mid]右侧,故arr[mid]及其左侧均不为k,查找范围左侧为mid+1
 (2)若arr[mid]>k  则k在arr[mid]左侧,故arr[mid]及其右侧均不为k,查找范围右侧为mid-1
 (3)若arr[mid]==k  则查找完成
 3>没找到进行循环处理,若left<=right继续循环,否则终止循环
   容易出现思考问题的是left == right
   举个例子:当查找为k = 7时 第3次循环语句结束后mid = 5 left = 6 right = 6时还要进行下一次循环

前三次循环结束后mid left right 的值 1:4 5 9   2:7 5 6   3:5 6 6

下面的图示意了二分查找7的过程

 

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcmVhbCBXYW5neWFuYmlu,size_20,color_FFFFFF,t_70,g_se,x_16

 

#include<stdio.h>
#include<string.h>
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int k;
    scanf("%d", &k);
    int sz = sizeof(arr) / sizeof(arr[0]);
    int left = 0;
    int right = sz - 1;
    while (left <= right) 
    {
        int mid = (left + right) / 2;
        if (arr[mid] < k)
        {
            left = mid + 1;
        }
        else if (arr[mid] > k)
        {
            right = mid - 1;
        }
        else
        {
            printf("找到了,下标为:%d", mid);
            break;
        }
    }
    if (left > right)
    {
        printf("找不到!");
    }
    return 0;
}


对于找中间元素下标如果数字太大的话right+left就会太大溢出,可以改成mid=left+(right-left)/2

 

 

 

 

 

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

基础算法二分查找c语言 的相关文章

随机推荐

  • TypeScript 变量声明 —— 类型断言(Type Assertion)

    类型断言 Type Assertion TypeScript 允许你覆盖它的推断 并且能以任何你想要的方式分析它 这种机制被称为类型断言 类型断言使用 as 关键字或者
  • 查出反向木马的反向连接域名

    来源 ttian net 反向木马的主要种植手段是通过IE的众多漏洞 bt下载时不小心运行 或者来路不明的软件 使未打补丁的用户点击之后下载运行了木马程序 而这些用户基本都是拥有动态IP的个人用户 若不使用反向连接的方式 势必无法长久控制
  • k8s中创建pv和pvc

    1 创建一个pv apiVersion v1 kind PersistentVolume metadata name pv0003 名称 spec capacity storage 5Gi 卷大小 volumeMode Filesystem
  • Unity中自动识别串口以及热拔插

    最近需要在Unity中实现自动识别热拔插并识别串口的功能 实在没有找到原生的消息响应 折腾了一周 尝试了多种方法 总结一下主要有3种实现思路 1 利用Form类中的消息进行串口拔插消息的接收 2 实时保存串口信息到外部文件 进行判别 3 读
  • Vscode中安装 n 命令来切换 node 版本以适应不同项目不同的node版本号

    一 问题描述 Centos中第一次安装的node 因为下载的源码是最新的 是最新的版本18 14 0的 但发现项目启动的时候提示 二 解决办法 这时候会有两个选择 卸载node然后重新安装符合项目的版本 比较麻烦 有时候可能node还卸载不
  • 踩坑道路之——ubuntu下pt query digest无法分析慢查询日志

    刚才在使用pt query digest分析慢查询日志的时候 当我优雅的敲出 sudo pt query digest var lib mysql yang K45VD slow log 此时终端并没有像我所希望的那样 现实慢查询的分析结果
  • 浏览器内核,user-agent

    最近web界被红芯事件吵得沸沸扬扬 也激起了我对浏览器内核进一步的学习热情 先来看看user agent 它是我们前端开发获取用户操作系统 浏览器版本等数据的常用方法 UA存在于每次http请求的请求头中 像这样 Mozilla 5 0 W
  • 鸽子学统计

    文章目录 第一部分 基础统计 0 统计学的目的和本质 0 1 随机变量 0 2 统计分析的目的 0 3 统计学的本质 1 描述统计 1 1 变量的测量尺度分类 1 2 均值 1 3 众数和中位数 1 4 极差和标准差 1 5 偏度和峰度 1
  • linux:argument list too long的解决方案

    问题 展示 删除的文件数目过多时 linux命令会报错 如下 rm 命令 rm txt zsh argument list too long rm ls命令 ls txt zsh argument list too long ls 原因 猜
  • Outlook无需API开发连接钉钉群机器人,实现新增会议日程自动发送群消息通知

    Outlook用户使用场景 在企业中 会议和活动的顺利举行对于业务运转和团队协作至关重要 然而 计划的变动总是无法避免 这可能会导致其他人的计划受到影响 打乱原有的安排 为了解决这个问题 许多企业开始使用各种工具和技术来确保信息的及时传递和
  • 【计算机网络】MAC帧和PPP帧(定义+使用范围+区别+共同点)

    目录 0 前言 1 PPP的定义 1 1 点对点协议PPP Point to Point Protocol PPP 1 2 PPP帧 1 3 PPP帧的格式 1 3 1 首部 1 3 2 尾部 2 MAC的定义 2 1 媒体接入控制层MAC
  • 数据库多版本读场景

    session 1 session 2 select a from test return a 10 start transaction update test set a 20 start transaction select a fro
  • Qt 菜单栏QMenu、下拉菜单QAction、工具栏QToolBar的使用

    如下内容是实现一个菜单栏以及下拉菜单的制作 在mainwindow h中添加如下内容 1 class QAction 2 class QMenu 在pro中添加QT widgets QMenu类作为菜单栏 QAction类作为点击菜单栏的下
  • CTF 隐写工具Steghide

    Steghide 是一个可以将文件隐写到图片或者音频得工具 Steghide支持以下图像格式 JPEG BMP WAV AU文件 apt get install steghide 使用查看帮助文件 steghide help steghid
  • 谷粒商城2-环境安装

    谷粒商城2 环境安装 一 安装VirtualBox 1 官网下载 https www virtualbox org wiki Downloads 2 开启CPU虚拟化 3 下载vagrant安装虚拟机镜像 https www vagrant
  • Y9000X 2022 i7-12700H+3060 安装ubuntu18.04.6+问题记录

    Y9000X 2022 i7 12700H 3060 安装ubuntu18 04 6 问题记录 前言 1 Ubuntu18 04 安装 1 1 官网下载Ubuntu18 04 6 镜像 1 2 U盘启动盘制作 1 3 系统安装 2 问题总结
  • VC ini配置文件常用操作

    A 读写ini文件 ini文件 即Initialization file 这种类型的文件中通常存放的是一个程序的初始化信息 ini文件由若干个节 Section 组成 每个Section由若干键 Key 组成 每个Key可以赋相应的值 读写
  • Dynamics CRM2013/2015 检索实体属性的两种方式

    昨天有朋友问起如何查询一个字段属性是否存在于某个实体中 一般这个问题我们会采取最直观的查询方式即MetadataBrowser 该工具是一个zip解决方案包在SDK中的如下目录内 SDK Tools MetadataBrowser 解决方案
  • 【kubernetes】kubeadm安装多master节点的k8s集群

    1 概述 K8s主要分为master节点 控制节点 和node节点 运行容器pod master节点中有apiserver controller manager scheduler和etcd几个主要组件 node节点一般有kubelet k
  • 基础算法二分查找c语言

    gt 大家有没有玩过猜数字游戏 你猜一个数就说你猜大了还是猜小了 猜正确就结束 你是怎么猜呢 不会从头到末尾一个一个猜吧 我们先找中间的数猜一次缩减一半的范围 在 1 2 3 4 5 6 7 8 9 10 查找7 和 17 1 把数据存放在