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

查找-二分查找

最简单的情况就是有序数组中不存在重复元素,我们在其中用二分查找值等于给定值的数据。我用 Java 代码实现了一个最简单的二分查找算法。...注意这里的 +1 和 -1 实际上,二分查找除了用循环来实现,还可以用递归来实现,过程也非常简单。我用 Java 语言实现了一下这个过程,正好你可以借此机会回顾一下写递归代码的技巧。...如果我们将这个问题稍微修改下,有序数据集合中存在重复的数据,我们希望找到第一个值等于给定值的数据,这样之前的二分查找代码还能继续工作吗?...二分查找的核心思想理解起来非常简单,有点类似分治思想。即每次都通过跟区间中的中间元素对比,将待查找的区间缩小为一半,直到找到要查找的元素,或者区间被缩小为 0。但是二分查找的代码实现比较容易写错。...所以今天的内容你最好能用自己实现一遍,对锻炼编码能力、逻辑思维、写出 Bug free 代码,会很有帮助。 课后思考 我们今天讲的都是非常规的二分查找问题,今天的思考题也是一个非常规的二分查找问题。

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

    二分查找---折半查找

    定义mid = (low+high) / 2,即顺序表的中间位置,然后用所查找的值与mid所在位置处的值比较,由于列表有序,若所查找的值比mid小,则只需在表的前半部分查找,否则只需在表的后半部分查找(...若第一次比较就发现两值相等则直接返回当前值所在的位置),以此类推,直至查找到所寻找的值或确定所查找的值不在该列表内为止(即查找失败)。...有序数组中没有重复元素的情况下 #include using namespace std; //二分查找算法---返回查找到的元素的下标 //数组 数组长度 查找的值 int test...我们只需对else语句略作修改 #include using namespace std; //二分查找算法---返回查找到的元素的下标 //数组 数组长度 查找的值 int test...递归方法实现 #include using namespace std; //二分查找算法---返回查找到的元素的下标 //数组 数组长度 查找的值 int test(int arr

    67210

    二分查找

    本页目录 二分查找 基础版 二分查找 基础班 优化点:无符号右移运算符>>> 二次查找 改动版 需求:在有序数组A中,查找值target。...如果找到了,返回target的索引,如果找不到返回-1 二分查找 基础版 解决思路:定义3个元素:左边界、有边界、中间索引。...public class 二分查找 { // 前置了解:二分法,核心是获取中间索引,比如5个元素,中间的索引是2,(int)5/2 正好是2哦 // 有3个重要元素:左边界、有边界、中间边界...public class 二分查找改动版 { // 前置了解:二分法,核心是获取中间索引,比如5个元素,中间的索引是2,(int)5/2 正好是2哦 // 有3个重要元素:左边界、有边界...本站ChatGPT:你问问给我来份Java最优二分查找代码,也行!

    22820

    二分查找

    二分查找 在对线性表的操作中,经常需要查找某一个元素在线性表中的位置。此问题的输入是待查元素x和线性表L,输出为x在L中的位置或者x不在L中的信息。...算法介绍: 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。...首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表...,否则进一步查找后一子表。...int b=Sc.nextInt(); HalfSearch hf=new HalfSearch(); hf. halfSearch(b,list); //二分查找

    23930

    二分查找

    二分查找思想 二分查找针对的是一个有序的数据集合,每次都跟区间的中间元素做对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间变为 0。...代码实现 3.1 非递归实现 最简单的情况就是有序数组不存在重复元素,用二分查找值等于给定值的数据,代码如下: public int bsearch(int[] a, int n, int value)...二分查找的局限性 依赖顺序表结构,简单说就是数组 针对的是有序数据,否则就需要先排序了 数据量太小不适合二分查找,直接遍历就行了 数据量太大不适合二分查找,因为数组需要连续的内存空间,假如数据有 2GB...最简单的一种二分查找的代码还是很好写的,但是实际开发中就没有这么简单了。 5....二分查找的变形问题 5.1 查找第一个值等于给定值的元素 比如下面这个有序数组,a5 a6 a7 的值都是 8,我们希望查找的是第一个值等于 8 的数据,也就是下标是 5 的元素,如下图: 如果用上次的二分查找代码实现

    86045

    二分查找

    最暴力的方法: o(n2) 折半查找: 对于某个元素是(logn),如果有那个元素就是(nlogn)。...std::vector search_array(std::vector & sort_array, std::vector &random_array){ } 二分查找又称折半查找...,假设表中元素是按升序排列,将表中间位置的关键字与查找关键字比较: 1.如果两者相等,则查找成功; 2.否则利用中间位置将表分成前、后两个子表: 1)如果中间位置的关键字大于查找关键字,则进一步查找前一子表...2)否则进一步查找后一子表 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。...target == sort_array[mid]){ return true; } else if( target == sort_array[mid]){//在左区间查找

    20940

    二分查找

    概述 在上文《二分查找》中,我们了解了二分查找基本实现原理和具体的实现算法。 但大家有没有发现,如果目标查找值,如果在查找序列中存在多个,则查找返回的索引值,会有所变化。...那下面我们试着利用二分查找实现以下功能: 查找目标值在序列中第一次出现时的索引 查找目标值在序列中最后一次出现时的索引 例如,有序列如下: seq = [1, 2, 3, 4, 5, 5, 5, 5,...6, 7, 8] 我们查找目标值: 5 第一次出现在索引为:4 的位置 最后一次出现在索引为:7 的位置 下面我们对二分查找算法进行策略改造升级为: # 用于实现二分查找第一次出现的算法 first_binary_search...(seq, query) # 用于实现二分查找最后一次出现的算法 last__binary_search(seq, query) 代码实现 first优先策略算法实现 # -*- coding:utf...-8 -*- __author__ = '苦叶子' # first二分查找算法 # seq 待查序列 # query 要查找的目标 def first_binary_search(seq, query

    1.2K60

    二分查找

    概要 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。...案例 1 请对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在次数,并且求出下标,如果没有就提示“没有这个数”。...就返回 3.什么时候结束递归 (1)找到就结束 (2)递归完整个数组,仍然没有找到findval ,也需要结束递归当left > right 就需要退出 代码 internal class BinarySearch...{ //二分查找算法 /// /// 初始化 /// /// <param...思路 本例是二分查找算法 1.在找到mid值,不要马上返回 2.向mid索引值的左边扫描,将所有满足1000的元素的下标加入到一个集合中 3.向mid索引值的右边扫描,将所有满足1000的元素的下标加入到一个集合中

    27120
    领券