二分查找算法(递归与非递归两种方式)

2023-05-16

首先说说二分查找法。

二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回对应的数组下标,没有找到返回-1;

如下示例,其中有序数组中, 是按照从小到大的顺序排列的。(再次感谢网友的指出)


采用非递归方式完成二分查找法。java代码如下所示。

/**
     * 二分查找普通实现。
     * @param srcArray 有序数组
     * @param key 查找元素
     * @return  不存在返回-1
     */
    public static int binSearch(int srcArray[], int key) {
        int mid;
        int start = 0;
        int end = srcArray.length - 1;
        while (start <= end) {
            mid = (end - start) / 2 + start;
            if (key < srcArray[mid]) {
                end = mid - 1;
            } else if (key > srcArray[mid]) {
                start = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }


采用递归方式完成二分查找算法。代码如下所示。

/**
     * 二分查找递归实现。
     * @param srcArray  有序数组
     * @param start 数组低地址下标
     * @param end   数组高地址下标
     * @param key  查找元素
     * @return 查找元素不存在返回-1
     */
    public static int binSearch(int srcArray[], int start, int end, int key) {
        int mid = (end - start) / 2 + start;
        if (srcArray[mid] == key) {
            return mid;
        }
        if (start >= end) {
            return -1;
        } else if (key > srcArray[mid]) {
            return binSearch(srcArray, mid + 1, end, key);
        } else if (key < srcArray[mid]) {
            return binSearch(srcArray, start, mid - 1, key);
        }
        return -1;
    }


递归思想会被经常用到,更加突出了编程解决问题的高效。

调用执行main函数,代码如下。

 public static void main(String[] args) {
        int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};
        System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 222));
        System.out.println(binSearch(srcArray,81));
    }


在这里说声抱歉,之前的代码有问题,自己一直没有修改,罪过罪过



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

二分查找算法(递归与非递归两种方式) 的相关文章

随机推荐

  • 十年一剑,阿里推荐与搜索引擎平台AI·OS首次公开!

    阿里妹导读 xff1a 9月28日 xff0c 阿里搜索迎来了十周年纪念日 久经考验的搜索与推荐平台 xff0c 支撑了淘宝 天猫 优酷乃至海外电商在内整个阿里集团的推荐与搜索的业务 xff0c 引导成交占据了集团GMV的绝大部分份额 随着
  • 嵌入式笔试面试题目系列(汇总)

    嵌入式笔试 一 进程与线程1 什么是进程 线程 xff0c 有什么区别 xff1f 2 多进程 多线程的优缺点3 什么时候用进程 xff0c 什么时候用线程4 多进程 多线程同步 xff08 通讯 xff09 的方法5 进程线程的状态转换图
  • 一文带你学习Chat GPT兼并了解国内镜像网站

    OpenAI近期发布聊天机器人模型ChatGPT xff0c 迅速出圈全网 它以对话方式进行交互 以更贴近人的对话方式与使用者互动 xff0c 可以回答问题 承认错误 挑战不正确的前提 拒绝不适当的请求 高质量的回答 上瘾式的交互体验 xf
  • 经典文献阅读之--Point-LIO(鲁棒高带宽激光惯性里程计)

    0 简介 在我们之前接触的算法中 xff0c 基本上都是要处理帧间雷达畸变的 xff0c 类似于VSLAM系统 xff0c 频率固定 xff08 例如10Hz 而实际上 xff0c 激光雷达点是按照不同的时间瞬间顺序采样的 xff0c 将这
  • 深度学习模型压缩方法概述

    一 xff0c 模型压缩技术概述 我们知道 xff0c 一定程度上 xff0c 网络越深 xff0c 参数越多 xff0c 模型也会越复杂 xff0c 但其最终效果也越好 xff0c 而模型压缩算法是旨在将一个庞大而复杂的大模型转化为一个精
  • [Err] [ModelDatabase.cc:] Unable to parse model.config for model

    問題 xff1a Err ModelDatabase cc 390 Unable to parse model config for model http gazebosim org models bin 4 dropping task E
  • kazam崩溃(dash)存留文件格式为.mux/movie,有效convert to MP4

    整理 xff1a How To Convert mux Kazam into mp4 Worked YouTube
  • 一个老外提供的google docs代码。 看着蛋疼..

    最近终于找到些google docs的实现相关文章与代码 xff0c 之前一直在gdocs上面挖掘 现在看到官方的描述感觉蛮亲切的 xff0c 活活 官网描述的google docs的实现思路 xff1a http googledocs b
  • 详解各种iou损失函数的计算方式(iou、giou、ciou、diou)

    本文主要是理解各个回归损失函数的区别和改进 xff0c 其实最主要的还是这些损失函数在yolo中起到了非常大的作用 xff0c 包括从最原始的yolov3中引入 xff0c 到v4 v5中变成真正的官方损失函数 xff0c 确实很有效 本文
  • 1.机器视觉标准框架学习

    在工业机器视觉上 xff0c 常见的图像处理库有opencv halcon visionpro sherlcok等 其中visionpro和sherlcok是拖拽式编程 xff0c 方便用户开发视觉项目 但对于opencv 和halcon则
  • 我的2013,我的回归本质

    以前每到年头年尾总是要求自己要写年度总结 xff0c 写年度计划 xff0c 但到后面都不了了之了 xff0c 想起都觉得惭愧 我是一个大专生 xff0c 专业是电子信息工程 现在大三了 xff0c 感触良多 给自己的大学打个分吧 xff0
  • 二进制的浪漫

    0 基本性质 0 1 交换律 相同运算符下可任意交换 xff0c 不同的运算符不可交换 0 2 结合律 相同运算符是可结合的 0 3 分配律 a amp b
  • 安全多方计算新突破!阿里首次实现“公开可验证” 的安全方案

    阿里妹导读 xff1a 近日 xff0c 阿里安全双子座实验室与马里兰大学等高校合作的论文 Covert Security with Public Verifiability Faster Leaner and Simpler 1 被欧洲密
  • 书--益友--从不孤单

    看看自己的豆瓣读书 想读79 想读的书太多 xff0c 但工作会让读书变成一件奢侈的事情 xff0c 不过庆幸还是有奢侈的时间的 读书让我们快乐 雨果说过 xff0c 书籍是造就灵魂的工具 不知道你和我是否有相同的感受 读书能让我们开心 读
  • (九)分支限界法

    分支限界法 xff08 branch and bound method xff09 按广度优先策略搜索问题的解空间树 xff0c 在搜索过程中 xff0c 对待处理的节点根据限界函数估算目标函数的可能取值 xff0c 从中选取使目标函数取得
  • (七)贪心法

    贪心法比较简单 xff0c 从这个算法的名字看来差不多都了解了 xff0c 贪心 xff0c 贪心的人是只顾一时的利益 xff0c 不顾长远的利益 贪心法把一个问复杂问题分解为一系列较为简单的局部最优选择 xff0c 每一步选择都是对当前的
  • Struts旅程(一)Struts简介和原理

    struts 简介 Struts 是 Apache 软件基金会 xff08 ASF xff09 赞助的一个开源项目 它最初是 jakarta 项目中的一 个子项目 xff0c 并在 2004 年 3 月成为 ASF 的顶级项目 它通过采用
  • Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping

    上篇讲述了 struts 控制器 Action 和 DispatchAction 以及 LookupDispatchAction xff0c 本篇主要说说 struts 中的页面转发控制 xff0c struts 提供了 ActionFor
  • Hibernate旅程(四)Hibernate对数据库删除、查找、更新操作

    上篇 xff0c 我们以向数据库添加操作来演示 hibernate 持久化对象的三种状态 本节继续 hibernate 对数据库的其他操作 xff0c 删除 查询 修改 Hibernate 对数据删除操作 删除 User 表中个一条数据 x
  • 二分查找算法(递归与非递归两种方式)

    首先说说二分查找法 二分查找法是对一组有序的数字中进行查找 xff0c 传递相应的数据 xff0c 进行比较查找到与原数据相同的数据 xff0c 查找到了返回对应的数组下标 xff0c 没有找到返回 1 xff1b 如下示例 xff0c 其