首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

二分查找算法的正确方法

二分查找算法是一种常用的搜索算法,也被称为折半查找算法。它适用于有序数组或列表中的查找操作,并具有较高的效率。

算法步骤:

  1. 首先,将要查找的元素与有序数组或列表的中间元素进行比较。
  2. 如果要查找的元素等于中间元素,则返回该位置。
  3. 如果要查找的元素小于中间元素,则在左半部分继续进行二分查找。
  4. 如果要查找的元素大于中间元素,则在右半部分继续进行二分查找。
  5. 重复以上步骤,直到找到目标元素或查找范围为空。

二分查找的优势:

  1. 时间复杂度为O(log n),相比于线性查找的O(n)更加高效。
  2. 适用于大规模数据集的查找操作。
  3. 可以通过迭代或递归的方式进行实现。

二分查找的应用场景:

  1. 在有序数组或列表中查找某个特定元素。
  2. 在某个区间内查找满足条件的元素。

推荐的腾讯云相关产品和产品介绍链接地址: 腾讯云提供了多种云计算相关产品,以下是其中几个与搜索算法相关的产品:

  1. T-SDB:腾讯云的分布式存储数据库,适用于大规模数据集的存储与查询操作。详细介绍请参考:https://cloud.tencent.com/product/tsdb
  2. CDB:腾讯云的关系型数据库,可用于存储有序数据并进行高效的查找操作。详细介绍请参考:https://cloud.tencent.com/product/cdb
  3. CKafka:腾讯云的消息队列服务,可用于实现高性能的实时数据订阅与消费。详细介绍请参考:https://cloud.tencent.com/product/ckafka

请注意,以上只是一些示例产品,腾讯云还提供了众多其他云计算产品,可以根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PHP二分查找算法实现方法示例

本文实例讲述了PHP二分查找算法实现方法。分享给大家供大家参考,具体如下: 二分查找法需要数组是一个有序数组 假设我们数组是一个递增数组,首先我们需要找到数组中间位置....如果中间值大于我们给定值,说明我们值在中间位置之前,此时需要再次二分,因为在中间之前,所以我们需要变值是结束位置值,此时结束位置值应该是我们此时中间位置。...反之,如果中间值小于我们给定值,那么说明给定值在中间位置之后,此时需要再次将后一部分值进行二分,因为在中间值之后,所以我们需要改变值是开始位置值,此时开始位置值应该是我们此时中间位置,直到我们找到指定值...@param2 array $arr,要查找数组 @param3 int $start,查找起始位置 @param4 int $end,查找结束位置 @return mixed,找到了返回位置,...没找到返回false */ function getValue4($num,$arr,$start = 0,$end = 100){ //采用二分查找 $middle = floor(($end +

26320
  • 算法——二分查找算法

    一、简介 介绍:二分查找,也称折半搜索,是一种在 有序数组 中 查找某一特定元素 搜索算法。下面简单介绍其优缺点,以及编码实现。 优点:比较次数少,查找速度快,平均性能好。...二、中间值索引计算 说明:对应中间值索引计算有两种算法,分别如下: // 算法一 int mid = (low + high) / 2; // 算法二 int mid = low + (high...- low) / 2; 比较:这两种算法结果是一样。...不过对于算法一,极端情况可能出现值溢出(即 low + high 值大于了 int 类型范围)。而算法二不会有这个情况。...mid -1, target); } // 如果中间值比目标值小,则说明目标值在索引大那一半边,继续从这部分进行二分查找 if (arr[mid] <

    54610

    二分查找算法

    形如这样一种查找方法,我们将其称之为“二分查找”。 实现一个二分查找算法 leetcode上有一题关于二分查找题目,我们就以这个为例来实现一个二分查找。...所以提示还是很有帮助,虽然不一定能够体现在代码上。 思路 我们先分析下二分查找干了件什么事?...{ return mid; } mid = left + Math.floor((right - left) / 2); } return -1; }; 问题思考 二分查找时间复杂度是多少...先说答案,O(logn), 大致推到流程是,n(1/2)^k = 1, 倒推下k = log2n, 反应到计算机上时间复杂度就是logn 二分查找适用场景是什么?...面试刷人(因为容易写错),数据量中等,且数据不溢出范围,最重要是一组排好序数进行二分查找。 就拿我们上面最开头例子讲,普通查找要97次,而用了二分查找思想6次了,这不是很香嘛。

    50310

    算法二分查找

    最近在牛客网刷题,有一道题目是实现二分查找算法,由此便在咖啡店写了段代码,实现这个简单算法。但同时自己还有一个问题(见最后),希望有朋友能帮忙解答。后期如果自己知道答案,我会自己更新在此。 一....算法介绍    优点:比较次数少,查找速度快,平均性能好;    缺点:要求待查表为有序表,且插入删除困难。    适用:不经常变动而查找频繁有序列表。    时间复杂度:o(log(n)) 二....算法代码实现(C++) 1 // BinarySearch.cpp : Defines the entry point for the console application. 2 3 #include..."Not Found" : "Found") << endl; 70 71 system("pause"); 72 return 0; 73 } 运行显示正确。 三....问题    这里自己有一个小问题,就是算法接口中size_t width参数我并没有用到,同时我假设元素都是INT型。请问这里该如何修改,既能用到width,又不用假设元素为特定类型?谢谢。

    66060

    查找算法:二分查找法(折半查找)

    二分查找也称折半查找(Binary Search),它是一种效率较高查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。...猜数字游戏 大家都应该玩过猜数字游戏吧? 给定一个数字范围 1-100 随机抽取一个数字,然后玩家轮流猜数字,猜错时告诉玩家结果数字是大于猜测数字还是小于. 那么,该怎么猜数字最快得出答案呢?...当然就是二分查找了: 二分查找猜数字 每次猜数字,都按照范围一半进行猜测,例如 1-100范围,随机抽取55这个数字 折半查找猜50,大于50,那么这个数字范围就缩小到了50-100, 继续猜测75...这样下去,原本100个数字,最多只需要log2n 次即可查出数据 100数据,只需要最多8次即可查出 php代码实现 随机抽取 1-100 一个数字,猜测这个数字是多少? <?...mt_rand(0,100); echo "实际值为:{$randNum}\n"; function guess($randNum,$minNum,$maxNum,$guessNum=1){     //二分查找

    1.2K20

    算法入门-二分查找算法

    算法前提: ==>> 必须采用顺序存储结构 ==>> 必须按关键字大小有序排列 算法思路是: 1.每次去数组中中间值与被查找值进行比较 2.如果中间值小于被查找值,则选择中间值右边数组,重复...1,直到发现与被查找值相等数组元素或返回某个值,表示被查找值在数组中不存在。...3.如果中间值大于被查找值,则选择中间值左边数组,重复1,直到发现与被查找值相等数组元素或返回某个值,表示被查找值在数组中不存在。...下面是我个人代码实现: 1 /** 2 * 3 */ 4 package com.b510.algorithms; 5 6 /** 7 * 二分查找算法是在已经排序好数组中查找出某个值...* 22 * 二分法查询算法 23 * 24 * @param a 25 * 已经排序好数组 26 * @param x 27

    63020

    经典算法——二分查找

    什么是算法? 2. 算法效率 3. 二分查找 3.1 算法实践 3.2 时间复杂度 3.3 空间复杂度 1. 什么是算法?...任何被明确定义计算过程都可以称作 算法 ,它将某个值或一组值作为输入,并产生某个值或一组值作为输出。所以 算法可以被称作将输入转为输出一系列计算步骤 。 说白了就是步骤明确解决问题方法。...二分查找 查找也被成为检索,主要目的是从某种数据结构中找出符合条件数据,如果找到满足条件元素则代表查找成功,否则查找失败。 二分查找也称折半查找,是一种效率相对较高查找方法。...输入 n个数有序序列,以数组为例,默认升序 待查找元素key 输出 查找成功,返回元素位置 查找失败,返回-1或自定义标识符 说明 算法核心思想是不断缩小搜索范围,每次取区间中心来进行比较...平均情况 综合两种情况,二分查找时间复杂度为O(log2n)。 3.3 空间复杂度 该算法不会改变原有的元素集合,只需要几个额外变量记录关键信息,所以空间复杂度为常数级:O(1)。

    35940

    算法--二分查找--查找给定条件

    ,N,num) << endl; } 2.数据有序且有重复,查找第1个给定值 /** * @description: 查找第一个等于给定值元素 * @author: michael ming...) << endl; } 3.查找最后一个值等于给定值元素 /** * @description: 查找最后一个值等于给定值元素 * @author: michael ming * @date...(arr,N,num) << endl; } 4.查找第一个大于等于给定值元素 /** * @description: 查找第一个大于等于给定值元素 * @author: michael ming...) << endl; } 5.查找最后一个小于等于给定值元素 /** * @description: 查找最后一个小于等于给定值元素 * @author: michael ming * @date...) << endl; } 6.查找IP归属(利用上面#5代码) /** * @description: 查找ip地址归属,找到最后一个区间开始地址<=ip * @author: michael ming

    1.2K10

    算法图解|简单查找二分查找算法

    简单查找算法: 从头开始查找,待查找数字排在第多少位,则查找比较多少次 随便想一个1~100数字。 每次可以猜一个数字,反馈是这个数字大了,小了,还是对了。...假设从1开始依次往上猜,猜测过程会是上面简单查找那样这样。 算法代码如下: 结果如下图: 这也是说到简单查找,从前往后依次查找二分查找: 从50开始猜,每次从中间开始猜,排除一半可能。...接下来猜75试一试~ 这样,每次排除一半结果,不论最初是什么数字,最多7步就可以猜到正确结果。 如何计算得到这个7步呢? 每次排除一半可能,2^n = N,所以计算得到步数n为: 算法代码如下:

    1K40

    二分查找算法速记

    二分查找(英语:binary search),也称折半搜索(英语:half-interval search)对数搜索(英语:logarithmic search,是一种在有序数组中查找某一特定元素搜索算法...搜索过程从数组中间元素开始,如果中间元素正好是要查找元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素那一半中查找,而且跟开始一样从中间元素开始比较。...这种搜索算法每一次比较都使搜索范围缩小一半。...适合场景: Sorted(单调递增或者递减) Bounded (存在上下界,因为要一分为二进行查找) Accessible by index(能够通过索引访问) 时间复杂度: O(logN) 空间复杂度...: O(N) 使用常数空间,无论任何大小输入数据,算法使用空间都是一样 适用数据结构: 数组,因为在内存中时连续适合使用二分查找

    77540

    二分查找算法详解

    阿东正准备把每一本书在报警器下过一下,以找出引发警报书,但是保安露出不屑眼神:你连二分查找都不会吗?...分析这些细节差异以及出现这些差异原因,保证你能灵活准确地写出正确二分查找算法。...答:这也是二分查找一个难点,不过只要你能理解前面的内容,就能够很容易判断。 刚才明确了「搜索区间」这个概念,而且本算法搜索区间是两端都闭,即 [left, right]。...可以,但是不好,因为这样难以保证二分查找对数级复杂度了。 我们后续算法就来讨论这两种二分查找算法。...(left-1) : -1; 四、最后总结 先来梳理一下这些细节差异因果逻辑: 第一个,最基本二分查找算法: 因为我们初始化 right = nums.length - 1 所以决定了我们「搜索区间

    1K41

    【小算法二分查找

    谈论算法,典型问题除了排序,还有查找查找就是,从一个数据集合中查找某个数,如果找到了就返回该数据在数据集中索引,否则返回 -1。 最简单方法就是从头到尾依次查找。...但这有个问题,顺序查找时间复杂度是O(n)O(n)O(n),如果要从 1 亿个数据中查找某个数,最坏情况要查找 1 亿次。 那么有没有更快速算法呢?...实际上,二分查找逻辑和这个无异。 算法图例 假如要从下面的有序数组中查找 25 。...arr = [1,3,16,23,25,32,79] 二分查找思路就是每一次都和数组中中间数据比较,不断缩小候选数据集范围 ? 上面的图例清晰明了。...值得注意是,二分查找法适用与有序数组。如果是无序就不能操作。并且如果数据用链表形式也比较麻烦。

    35820
    领券