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

算法——二分查找算法

一、简介 介绍:二分查找,也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法。下面简单介绍其优缺点,以及编码实现。 优点:比较次数少,查找速度快,平均性能好。...三、编码实现 /** * 二分查找法 * * @author xjf * @date 2020/8/28 10:26 */ public class BinarySearch { public...System.out.println("目标值索引:" + loopIndex + " 从数组中获取值:" + arr[loopIndex]); } /** * 二分查找法...// 求中间索引 int mid = low + (high - low) / 2; // 如果中间值比目标值大,则说明目标值在索引小的那一半边,继续从这部分进行二分查找..., target); } // 目标值和中间索引对应的值相等时,返回目标值的索引 return mid; } /** * 二分查找

52110

二分查找算法

形如这样的一种查找方法,我们将其称之为“二分查找”。 实现一个二分查找算法 leetcode上有一题关于二分查找的题目,我们就以这个为例来实现一个二分查找。...思路 我们先分析下二分查找干了件什么事?无非就是在一个范围内取中间那位和目标元素进行比大小,如果没有恰好等于目标元素,我就继续选择两段其中的一段继续劈它,直到劈到还剩下最后一个元素。...先说答案,O(logn), 大致的推到流程是,n(1/2)^k = 1, 倒推下k = log2n, 反应到计算机上的时间复杂度就是logn 二分查找适用的场景是什么?...面试刷人(因为容易写错),数据量中等,且数据不溢出范围,最重要的是一组排好序的数进行二分查找。 就拿我们上面最开头的例子讲,普通的查找要97次,而用了二分查找的思想6次了,这不是很香嘛。...参考文献 704.二分查找(leetcode): https://leetcode-cn.com/problems/binary-search/

47510
您找到你想要的搜索结果了吗?
是的
没有找到

算法二分查找

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

62660

算法入门-二分查找算法

算法前提: ==>> 必须采用顺序存储结构 ==>> 必须按关键字大小有序排列 算法思路是: 1.每次去数组中的中间值与被查找的值进行比较 2.如果中间值小于被查找的值,则选择中间值右边的数组,重复...1,直到发现与被查找的值相等的数组元素或返回某个值,表示被查找的值在数组中不存在。...3.如果中间值大于被查找的值,则选择中间值左边的数组,重复1,直到发现与被查找的值相等的数组元素或返回某个值,表示被查找的值在数组中不存在。...下面是我个人的代码实现: 1 /** 2 * 3 */ 4 package com.b510.algorithms; 5 6 /** 7 * 二分查找算法是在已经排序好的数组中查找出某个值...x + "]在数组中,且下标为:" + index; 18 System.out.println(result); 19 } 20 21 /** 22 * 二分法查询算法

60820

经典算法——二分查找

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

32440

二分查找算法速记

二分查找(英语:binary search),也称折半搜索(英语:half-interval search)对数搜索(英语:logarithmic search,是一种在有序数组中查找某一特定元素的搜索算法...搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。...这种搜索算法每一次比较都使搜索范围缩小一半。...: O(N) 使用常数空间,无论任何大小的输入数据,算法使用的空间都是一样的 适用的数据结构: 数组,因为在内存中时连续的适合使用二分查找。...判断其与查找目标的大小关系,相等则程序返回, 比目标小则挪动left指针到mid + 1;比目标大则挪动right指针到mid - 1 重复上面步骤2 ~ 4直到找到目标元素或者程序退出。

74840

二分查找算法详解

二分查找真的很简单吗?并不简单。...分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二分查找算法。...答:这也是二分查找的一个难点,不过只要你能理解前面的内容,就能够很容易判断。 刚才明确了「搜索区间」这个概念,而且本算法的搜索区间是两端都闭的,即 [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] 二分查找的思路就是每一次都和数组中的中间数据比较,不断缩小候选数据集的范围 ? 上面的图例清晰明了。...值得注意的是,二分查找法适用与有序数组。如果是无序的就不能操作。并且如果数据用链表形式也比较麻烦。

33820

java算法|二分查找

0x01,二分查找概念 二分查找又称为折半查找,它是一种效率较高的查找方法,但是,折半查找要求线程表必须采用顺序存储结构,且表中的元素是有序的。...0x02,先进行数据元素的排序 折半查找的前提是有序,无论升序还是降序 0x03,折半查找的过程 首先,假设表中元素是按升序排列,将表中中间位置记录的关键字num[mid]与待查找的关键字进行比较,若相等...,则查找成功,返回即可。...0x04,折半查找示例程序 ? 0x05,重点我们看下jdk提供的二分查找的实现方法 ? 0x06,首先判断查找的数据,数组下标是否合法,不合法如何做,合法了然后进行算法的实现。 ?...0x09,总结 整个实现的过程和我们的差不多,但是还是建议使用现成的方法,这样就会方便,这算是毕业后很长一段时间以来学习二分查找的内容了,到这里的理解就结束了。

38830
领券