首页 > 编程语言 >C# 二分法查询代码

C# 二分法查询代码

时间:2024-01-24 11:56:38浏览次数:28  
标签:折半 start C# mid 查询 二分法 int 查找

二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。

使用二分法的前提条件是:在有序数组中查找特定元素

 public static int SearchInsert(int[] nums, int target) {
        int start = 0;//开始索引
        int end = nums.Length - 1;//结束索引 
        int mid = 0;//取中间索引
        while (start <= end)
        {
            mid = start+(end - start) / 2;
            if (target == nums[mid]) { return mid; }
            
            if (target < nums[mid])
            {
                end = mid - 1;
            }
            else if (target > nums[mid])
            {
                start = mid + 1;
 
            }
        }
        return start;
 }

代码解析:

二分查找的思路是

1.定义查找范围。start, end 开始索引和结束索引

2.折半缩小查找范围即mid=start+(end - start) / 2;防止数值溢出

如果目标数大于对半的数,则要插入的数在对半的右边,则开始查找的范围就需要更改为 start=mid+1;即对半之后的下一个数

如果目标数小于对半的数,则要插入的数在对半的左边,则结束查找的范围就需要缩短到 end=mid-1;即对半的前一个数

3.折半一次还没有找到就需要再次进行折半,重复步骤2的操作

标签:折半,start,C#,mid,查询,二分法,int,查找
From: https://www.cnblogs.com/jtcr/p/17984347

相关文章

  • 在TypeScript项目中搭配Axios封装后端接口调用
    前言本来是想发next.js开发笔记的,结果发现里面涉及了太多东西,还是拆分出来发吧~本文记录一下在TypeScript项目里封装axios的过程,之前在开发StarBlog-Admin的时候已经做了一次封装,不过那时是JavaScript,跟TypeScript还是有些区别的。另外我在跟着next.js文档开发的......
  • ASR6505是基于STM 8位MCU的无线通信芯片组
    ASR6505是基于STM8位MCU的无线通信芯片组ASR6505是一种通用的LoRa无线通信芯片组,集成了LoRa无线电收发器、LoRa调制解调器和一个8位CISCMCUASR6505是基于STM8位MCU与SX1262的SiP芯片,相对于32位MCU更具成本优势,8mm*8mm*0.9mm超小尺寸可以满足客户不同的产品规格,QFN68接口资源......
  • scikit-learn.datasets 机器学习库
    scikit-learn是一个用于Python的机器学习库,提供了大量用于数据挖掘和数据分析的工具。以下是对这些函数和方法的简要描述:clear_data_home:清除数据集目录的内容。dump_svmlight_file:将数据集保存为SVMLight格式的文件。fetch_20newsgroups:下载20个新闻组的文本数据集。f......
  • el-date-picker日期选择器默认值,时间跨度90天
    ElementUIDatePicker1.时间范围选择器,默认加载30天,输入开始时间,结束时间只能选90天内的,90天外的禁用不能选。1<el-date-picker2v-model="value"3clearable4style="width:100%"......
  • centos7部署kafka服务
    centos7下面安装kafka服务,用于自己测试1.安装JAVA环境yum-yinstalljava-1.8.0-openjdk2.下载代码curl-okafka_2.13-3.6.1.tgzhttps://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz3.更改配置运行tar-xfkafka_2.13-3.6.1.tgzcdkafka_2.13-3.6.1se......
  • Advanced .Net Debugging 1:你必须知道的调试工具
    一、简介   我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用。他们采取的分析方法通常包括:输出更多的调试信息,或者做一些临时性的代码审查。这里的临时性是指,通过猜测来推断问题可能来之哪个部分的代码。有时候,开发人员会幸运的发......
  • C++缺省参数
    缺省参数什么是缺省参数呢?简单来说,就是函数的参数可以给一个默认值,如果不给这个函数传递参数的时候那么改参数就是默认值,否则参数就是你指定的参数缺省参数分为全缺省和半缺省全缺省参数:所有的参数都有默认值voidfunc(inta=10,intb=20,intc=30){cou......
  • Fedora使用dnf安装package的时候遇到报错:Curl error (37): Couldn't read a file:// f
    问题描述在使用dnf包管理器下载软件包的过程中,多次遇到了以下错误Curlerror(37):Couldn'treadafile://fileforfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64[Couldn'topenfile/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64]系统是新配置的Fedora39WorkSt......
  • rocketmq--死信队列
    在RocketMQ中,死信队列(DeadLetterQueue,DLQ)用于存放无法成功消费的消息。当消息重试消费次数超过设定的阈值后,消息将被转移到死信队列。使用SpringBoot集成RocketMQ时,可以通过以下步骤来处理死信队列中的消息。首先,在pom.xml中添加RocketMQSpringBootStarter的依赖:<dependen......
  • Oracle12c 数据库 警告日志
    目录一:查看警告日志文件的位置二:警告日志内容三:告警日志监控:方案1:方案2:方案3: 正文 回到顶部一:查看警告日志文件的位置        Oracle12c环境下查询,alert日志并不在bdump目录下,看到网上和书上都写着可以通过初始化参数background_dump_dest来查看......