二分查找算法讲解及其C++代码实现

二分查找算法是一种常用的查找算法,也被称为折半查找。它可以在有序的数组或列表中快速查找需要的元素。

算法描述:

  1. 首先确定数组的中间位置mid=(left+right)/2;
  2. 然后将要查找的值key与中间位置的值进行比较;
  3. 如果key等于中间位置的值,则查找成功,返回mid;
  4. 如果key小于中间位置的值,则在左半部分继续查找;
  5. 如果key大于中间位置的值,则在右半部分继续查找;
  6. 重复以上步骤,直到查找到key或者left>right时,查找结束。

C++代码实现:

int binarySearch(int arr[], int n, int key)
{
    int left = 0;
    int right = n - 1;
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] == key)
            return mid;
        else if (arr[mid] > key)
            right = mid - 1;
        else if (arr[mid] < key)
            left = mid + 1;
    }
    return -1; // 查找失败,返回-1
}

该函数接收三个参数,分别是:

  1. arr:有序数组指针;
  2. n:数组长度;
  3. key:要查找的值。

如果查找成功,函数将返回该元素在数组中的下标;否则,返回-1表示查找失败。

注意:使用二分查找算法前,必须先对数组进行排序。

原文链接:https://www.cnblogs.com/oiercc/p/17361931.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:二分查找算法讲解及其C++代码实现 - Python技术站

(0)
上一篇 2023年4月30日
下一篇 2023年5月2日

相关文章

  • L2-001-紧急救援*C++(使用Dijkstra算法附带全详细注释)

      L2-001 紧急救援 分数 25 全屏浏览题目 切换布局 作者 陈越单位 浙江大学作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召…

    C++ 2023年4月18日
    00
  • C++容器(vector、deque、list、map)

    (1) vector:将元素置于一个动态数组中,可以随机存储元素(也就是用索引直接存取)。 数组尾部添加或删除元素非常迅速。但在中部或头部就比较费时。 *代码演示:* 取:at在下标越界时会抛出异常,我们能捕获异常进行处理;而[]下标越界会让程序直接终止; 构造函数: cbegin, cend, crbegin, crend返回的是常量迭代器,不能通过迭代器…

    C++ 2023年5月5日
    00
  • 非常可乐

    题目描述 大家一定觉得运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为\(S (S < 101)\)毫升 (正好装满一瓶) ,它们三个之间可…

    C++ 2023年4月27日
    00
  • 【Visual Leak Detector】配置项 ReportTo

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 配置文件中配置项 ReportTo 的使用方法。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 配置文件使用说明 2. 设置报告输出的位置 2.1 测试代码 2.2 ReportTo = debugger 时的输出 2.3 ReportTo = file 时的输出…

    C++ 2023年4月18日
    00
  • L1-087 机工士姆斯塔迪奥*(使用C++动态数组new暴力实现)

    L1-087 机工士姆斯塔迪奥 分数 20 全屏浏览题目 切换布局 作者 DAI, Longao单位 杭州百腾教育科技有限公司在 MMORPG《最终幻想14》的副本“乐欲之所瓯博讷修道院”里,BOSS 机工士姆斯塔迪奥将会接受玩家的挑战。 你需要处理这个副本其中的一个机制:N×M 大小的地图被拆分为了 N×M 个 1×1 的格子,BOSS 会选择若干行或/及…

    C++ 2023年4月18日
    00
  • 创建一个简单的Qt工程

    1.打开QtCreator进行如下选择。(开软去官网下载即可,注册邮箱可以断网跳过) 第一步: 选择Application     第二步:这里文件名称和路径都不要有中文 第三步:选择编译模式 点击下一步 第四步:选择 Widget点击下一步   第五步:运行工程,判断是否创建成功 课堂小记: 1.析构函数不能被重载 2.被protect关键字修饰的成员变量…

    C++ 2023年5月7日
    00
  • C++/Qt网络通讯模块设计与实现(六)

    前面章节主要讲述网络通讯客户端的实现,各位小伙伴需认真阅读以及理解,理会其中的思想,有疑问的地方可及时给我私信,我都会非常认真地解答大家的疑惑。 C++/Qt网络通讯模块设计与实现(一) C++/Qt网络通讯模块设计与实现(二) C++/Qt网络通讯模块设计与实现(三) C++/Qt网络通讯模块设计与实现(四) C++/Qt网络通讯模块设计与实现(五) 这节…

    C++ 2023年4月18日
    00
  • C++ 入门

    001 c++ 如何工作 任何以 # 开头的语句,都是预处理语句,所谓的预处理语句,在编译之前,就已经被处理了 关键字 include:找到 <> 文件(通常称为“头文件”),然后将 <> 中的所有内容拷贝到现在的文件里 main()比较特殊,虽然它的返回值类型是 int,但它不一定需要返回值,如果不设置返回值,默认返回 0 <…

    C++ 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部