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 2023年4月27日
    00
  • 关于C++中sort()函数的用法,你搞明白了没

    介绍C++中sort()函数的用法,有以下几点要点: sort()函数介绍 sort()函数是C++标准模板库(STL)中的一个常用算法,用于对数组或容器元素进行排序,其函数原型如下: template <class RandomAccessIterator> void sort ( RandomAccessIterator first, Ran…

    C 2023年5月22日
    00
  • Vue项目报错:Uncaught SyntaxError: Unexpected token ‘<’的解决方法

    对于Vue项目中出现的“Uncaught SyntaxError: Unexpected token ‘<’”错误,一般是由于代码中使用了不符合Vue模板语法规则的字符或语法造成的。解决这种问题的方法如下: 第一步:排查代码中可能存在的错误。 1.1 首先打开Vue组件文件或模板文件,依次检查文件中使用的HTML标签、Vue模板指令以及自定义Vue组件是否符…

    C 2023年5月23日
    00
  • C++ 动态内存管理详情解说

    C++ 动态内存管理详情解说 在 C++ 程序中,动态内存管理是一项非常重要的任务。动态内存分配和释放可以在运行时动态地完成,使程序具有更大的灵活性。本文将详细解释动态内存管理的概念以及它的使用方法。 什么是动态内存? 动态内存是指程序在运行时动态地分配的内存。每个程序都有一个静态内存,该内存是编译时分配的。静态内存的大小是固定的,而动态内存的大小不是固定的…

    C 2023年5月22日
    00
  • Linux下编译C程序的过程

    下面我会详细讲解如何在Linux系统下编译C程序的完整攻略,流程如下: 步骤一:安装gcc编译器 打开终端,使用以下命令安装gcc编译器: sudo apt-get update sudo apt-get install gcc 安装完成后可以使用以下命令检验是否安装成功: gcc -v 如果出现版本号信息,则表明安装成功。 步骤二:编写C程序 用文本编辑器…

    C 2023年5月23日
    00
  • 推箱子游戏C语言实现代码

    推箱子游戏是一款古老而经典的智力游戏,在这里我将详细讲解如何使用C语言实现这个游戏。以下是实现过程的完整攻略: 设计概述 在实现前,我们需要进行一些设计工作。推箱子游戏可以被看作是一个二维迷宫,我们需要设计一个二维数组来表示地图。数组元素可以是空地、墙壁、箱子或目标点。我们可以使用数字来表示不同的元素,例如0表示空地、1表示墙壁、2表示箱子、3表示目标点。我…

    C 2023年5月23日
    00
  • C C++ LeetCode题解在二叉树中增加一行示例详解

    C C++ LeetCode题解在二叉树中增加一行示例详解 在二叉树中增加一行的题目通常会让很多人头疼,本文将为大家提供一个详细而完整的攻略,同时提供两条示例说明。 题目描述 给定一个二叉树,根节点为第1层,现在要在第d层插入一个值为v的节点,使得原来的树变成新的树。插入完之后,新节点应该在原来第d层节点的左子树的位置上。 解题思路 一般情况下,我们可以采用…

    C 2023年5月23日
    00
  • C++中四种对象生存期和作用域以及static的用法总结分析

    C++中四种对象生存期和作用域以及static的用法总结分析 在C++中,对象是程序中的基本组成单位之一。对象有不同的生存期和作用域,对于理解C++程序的运行过程至关重要。static是一个关键字,它有多种用途。本文将详细介绍C++中四种对象生存期和作用域以及static的用法。 对象的生存期和作用域 C++中的对象根据生存期和作用域的不同可以分为以下四类:…

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