C++实现折半查找

实现折半查找的过程可以分为以下几步:

步骤一:准备有序数组

折半查找需要在一个有序数组中进行查找,因此首先需要准备一个有序数组,可以使用C++中的std::sort来进行排序。

#include <iostream>
#include <algorithm>

int main() {
    int arr[] = {2, 3, 4, 5, 7, 9, 10, 12, 13, 14};
    int n = sizeof(arr) / sizeof(arr[0]);
    std::sort(arr, arr + n);  // 使用std::sort进行排序
    return 0;
}

步骤二:实现折半查找

折半查找的基本思路是:首先确定查找区间的左右边界,然后计算出中间位置,如果中间位置的值正好是查找的值,查找过程结束;如果中间位置的值比查找的值大,则在左半部分继续查找;否则在右半部分查找。

在C++中可以实现如下:

#include <iostream>

int binarySearch(int arr[], int n, int target) {
    int left = 0, right = n - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (arr[mid] == target) return mid;  // 查找成功,返回下标
        else if (arr[mid] > target) right = mid - 1;  // 在左半部分查找
        else left = mid + 1;  // 在右半部分查找
    }
    return -1; // 查找失败,返回-1
}

int main() {
    int arr[] = {2, 3, 4, 5, 7, 9, 10, 12, 13, 14};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 7; // 这里查找元素7
    int res = binarySearch(arr, n, target);
    if (res == -1) std::cout << "未找到该元素\n";
    else std::cout << "该元素的下标为:" << res << "\n";
    return 0;
}

通过上面两个示例代码可以看出,原数组的大小为$N$时,折半查找的时间复杂度为$O(\log N)$,比较适合对大规模有序数据进行查找。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现折半查找 - Python技术站

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

相关文章

  • C语言多线程开发中死锁与读写锁问题详解

    C语言多线程开发中死锁与读写锁问题详解 介绍 多线程程序在共享资源的情况下容易产生各种问题。常见的问题之一是死锁和读写锁问题。本文将详细探讨这两个问题,并提供示例程序来阐述这些问题以及如何避免它们。读者需要有一定的C语言和多线程编程的基础知识。 死锁 当两个或多个线程同时尝试锁定一组资源,但是由于彼此依赖,从而导致其中一个线程等待的情况,这种情况叫做死锁。死…

    C 2023年5月23日
    00
  • Spring 4.1+JSONP的使用指南

    Spring 4.1+JSONP的使用指南 什么是JSONP JSONP(JSON with padding)是一种跨域数据访问的解决方案。在同源策略限制下,浏览器无法直接访问不同域下的服务器资源,但是可以通过<script>标签加载资源,因此JSONP的实现原理就是通过在URL后加入一个回调函数名,返回值作为函数的参数,被包裹在函数调用中,从而…

    C 2023年5月23日
    00
  • C语言实现电脑关机程序

    下面是完整的攻略。 C语言实现电脑关机程序 介绍 电脑关机程序是一种可以让计算机系统自动关机的软件程序。在 C 语言中,我们可以使用系统函数来实现这个功能。本文将介绍 C 语言实现电脑关机程序的步骤。 步骤 第一步:引入头文件 在 C 语言中,我们需要引入头文件 windows.h 来使用系统函数。 #include <windows.h> 第二…

    C 2023年5月23日
    00
  • C语言求解最长公共子字符串问题及相关的算法分析

    C语言求解最长公共子字符串问题及相关的算法分析 简介 在文本处理中,求解最长公共子字符串问题是一个普遍的、重要的问题。该问题描述如下:给定两个字符串s1和s2,求它们的最长公共子字符串,即在两个字符串中都出现过的最长的子串。 算法分析 在求解最长公共子字符串问题中,有多种不同的算法,这里介绍两种常用的算法:暴力枚举和动态规划。 暴力枚举算法 暴力枚举算法是最…

    C 2023年5月22日
    00
  • PHP实现将Word文件保存到SQL Server数据库

    实现将Word文件保存到SQL Server数据库需要借助PHP的相关扩展实现,主要包括PDO和COM对象。下面是具体的步骤: 安装COM组件 要使用COM对象操作Word文档,需要在服务器上安装Office组件。通常情况下,Windows服务器会自带Office,但需要手动安装相关的COM组件。具体的安装方法可以参考Microsoft官方文档。 安装PDO…

    C 2023年5月23日
    00
  • C 程序 查找给定范围内的回文数

    C 程序 查找给定范围内的回文数题目是一个比较典型简单的回文数算法题,可以通过C语言编程实现。 下面是C程序实现查找回文数的完整使用攻略: 1. 确定算法和数据结构 题目要求查找给定范围内的回文数,所以可以选择使用“回文数判断算法”对给定的范围内的数逐一进行判断。 判断给定数x是否为回文数的算法可以用以下方式: 将这个数每一位上的数字存储到数组中(例如,数字…

    C 2023年5月9日
    00
  • 开机0xc000000f进不了系统怎么办?0xc000000f进不了系统修复方法

    开机0xc000000f进不了系统怎么办 问题描述 在开机时,如果系统提示0xc000000f错误,那么说明Windows启动管理器中的某个文件已损坏或被删除,Windows无法正常启动。 修复方法 方法一:使用Windows安装光盘修复启动 将Windows安装光盘插入电脑并重启电脑。 进入Windows安装环境界面,选择语言、时间以及货币格式等信息。 单…

    C 2023年5月23日
    00
  • c语言连接mysql数据库的实现方法

    下面是详细讲解连接MySQL数据库的实现方法的完整攻略: 1. 安装MySQL C连接库 在连接MySQL数据库时,我们需要使用到MySQL C连接库,因此我们需要先安装该库。在Linux系统中,我们可以使用以下命令来安装: sudo apt install libmysqlclient-dev 在Windows系统中,我们需要从MySQL官网或源码中下载并…

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