C++二分查找(折半查找)算法实例详解

C++二分查找(折半查找)算法实例详解

什么是二分查找(折半查找)算法?

二分查找(折半查找)算法是一种在有序数组中查找某一特定元素的搜索算法。查找流程是先将数组元素按照大小排序,然后每次将待查找元素与数组的中间元素进行比较,不断缩小查找范围,直到找到目标元素,或者确定目标元素不存在于数组中。

二分查找(折半查找)算法示例

算法流程

1.首先确定数组的左右边界left和right,其中left=0,right=n-1,n为数组元素个数。

2.计算中间元素mid,其中mid=(left+right)/2。

3.比较待查找元素与中间元素大小,如果相等,则查找成功并返回对应的数组下标;如果待查找元素小于中间元素,则在串左半部分继续查找;否则,在串右半部分继续查找。

4.通过不断重复以上步骤,直到找到目标元素或者确定目标元素不存在于数组中。

示例1

假设有一个有序数组A={1,2,3,4,5,6,7,8,9},要在其中查找元素5的位置,以下是C++代码实现:

#include <iostream>
using namespace std;

int BinarySearch(int A[], int n, int x)
{
    int left = 0;  // 左边界
    int right = n - 1;  // 右边界
    while (left <= right)
    {
        int mid = (left + right) / 2;  // 中间元素
        if (A[mid] == x)  // 找到目标元素
            return mid;
        else if (A[mid] > x)  // 目标元素在左半部分
            right = mid - 1;
        else  // 目标元素在右半部分
            left = mid + 1;
    }
    return -1;  // 目标元素不存在
}

int main()
{
    int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int n = sizeof(A) / sizeof(A[0]);
    int x = 5;  // 目标元素
    int result = BinarySearch(A, n, x);
    if (result == -1)
        cout << "元素不存在" << endl;
    else
        cout << "元素下标为:" << result << endl;
    return 0;
}

输出结果为:

元素下标为:4

示例2

假设有一个有序数组A={1,2,3,4,5,6,7,8,9},要在其中查找元素10的位置,以下是C++代码实现:

#include <iostream>
using namespace std;

int BinarySearch(int A[], int n, int x)
{
    int left = 0;  // 左边界
    int right = n - 1;  // 右边界
    while (left <= right)
    {
        int mid = (left + right) / 2;  // 中间元素
        if (A[mid] == x)  // 找到目标元素
            return mid;
        else if (A[mid] > x)  // 目标元素在左半部分
            right = mid - 1;
        else  // 目标元素在右半部分
            left = mid + 1;
    }
    return -1;  // 目标元素不存在
}

int main()
{
    int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int n = sizeof(A) / sizeof(A[0]);
    int x = 10;  // 目标元素
    int result = BinarySearch(A, n, x);
    if (result == -1)
        cout << "元素不存在" << endl;
    else
        cout << "元素下标为:" << result << endl;
    return 0;
}

输出结果为:

元素不存在

从以上两个示例可以看出,二分查找(折半查找)算法适用于有序数组,时间复杂度为O(log n),效率非常高,可以快速地查找数组中的元素。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++二分查找(折半查找)算法实例详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Objective-C和Swift的转换速查手册(推荐)

    作为网站作者,我们提供了一份Objective-C和Swift的转换速查手册,可以帮助开发者快速了解两种语言之间的相互转换规则。以下是手册的完整攻略: 什么是Objective-C和Swift的转换速查手册? Objective-C和Swift是苹果公司官方推出的两种主要开发语言,然而两者之间的语法和语义存在一定的差异,导致不同版本之间的代码转换比较困难。为…

    C 2023年5月22日
    00
  • 华硕C6H主板怎么样?华硕ROG C6H主板性能详解

    华硕C6H主板怎么样?华硕ROG C6H主板性能详解 1. 基本概述 华硕ROG C6H主板是一款面向高性能玩家和游戏爱好者的主板,采用AM4芯片组,支持AMD Ryzen处理器。该主板拥有ATX尺寸,配备了多个高速M.2接口、USB Type-C接口、PCI-E 3.0插槽等,充分满足用户对高速数据传输和扩展性能的需求。此外,C6H主板支持高速Wi-Fi、…

    C 2023年5月23日
    00
  • 解决python subprocess参数shell=True踩到的坑

    下面就为你详细讲解如何解决Python subprocess参数shell=True踩到的坑,包括具体步骤和示例说明。 什么是subprocess? 在Python中,subprocess是一个标准库,用于管理子进程。通过subprocess模块,可以启动一个新的进程,并与它进行通信,从而能够执行操作系统级别的任何命令。 shell=True的作用 在使用P…

    C 2023年5月22日
    00
  • C++ 利用硬件加速矩阵乘法的实现

    C++ 利用硬件加速矩阵乘法的实现 介绍 矩阵乘法是计算机科学中的基本算法之一。通常来说,矩阵乘法是一个非常耗时的计算过程,特别是在矩阵规模非常大的情况下,为了提高矩阵乘法的计算速度,我们可以使用硬件加速的方法,例如使用CPU或GPU指令集中的高性能指令。 实现 在C++中,我们可以使用不同的方式实现矩阵乘法算法。这里我们介绍两种常见的实现方法: 方法一 使…

    C 2023年5月22日
    00
  • 在HTML5中使用MathML数学公式的简单讲解

    下面是HTML5中使用MathML数学公式的简单讲解: 什么是MathML MathML全称是Mathematical Markup Language,是用于在Web上显示数学公式的一种标记语言。MathML是XML的扩展,可以通过在HTML或XML文档中嵌入MathML代码来呈现数学公式。 如何使用MathML 需要指定DOCTYPE 为了使用MathML…

    C 2023年5月23日
    00
  • 初学C语言基本运算和表达式

    初学C语言基本运算和表达式攻略 C语言是一门计算机编程语言,基本运算和表达式是C语言编程中的基础知识点。在学习这一部分内容时,需要掌握以下知识点: 基本运算符 表达式的运算顺序 数据类型的转换 下面我们来一步步了解这些知识点。 基本运算符 在C语言中,基本运算符包括算术运算符、关系运算符、逻辑运算符和位运算符。 算术运算符 算术运算符包括加(+)、减(-)、…

    C 2023年5月23日
    00
  • C语言的语法风格与代码书写规范指南

    C语言的语法风格与代码书写规范指南 C语言作为一门编程语言,具有严谨、简洁、高效的特点。为了使得代码易于维护、易于理解、易于扩展,需要遵守一些语法风格与代码书写规范。 命名规范 变量名、函数名等采用小写字母加下划线的方式,如:user_id 宏定义采用全部大写的方式,如:#define MAX_NUM 100 结构体名、枚举类型名首字母大写,采用驼峰命名法,…

    C 2023年5月23日
    00
  • Python中非常实用的Math模块函数教程详解

    Python中Math模块函数教程详解 Math模块是Python中一个非常实用和重要的模块,它提供了许多数学计算相关的函数,包括三角函数、指数、对数、常数以及其他数学函数。在本文中,我们将介绍一些最常用的Math模块函数及其应用。 1. 导入Math模块 首先,我们需要导入Math模块才能使用它的函数。在Python中,可以使用以下代码导入Math模块: …

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