数据搜索之二分查询

2023-11-11

  数据搜索中,如果给定数据集是乱序的情况下一般我们使用顺序搜索按位查询是最常用的方法。但是一旦数据是顺序的,二分法则能大大减少数据搜索的工作量。尤其在几十万甚至上亿的数据量情况下,它的效率就能大大的体现。
  二分法的思想是通过每次把数据集所在小区间收缩一半的方法,使区间的两个端点逐步迫近待查询的数,以求得该数所在的索引。这种方法叫做二分法。
  程序如下,分别是使用迭代循环和使用递归方法实现的过程:

#include<iostream>
using namespace std;
/*
@二分搜索 要求数据已排序完毕 这是迭代循环实现
@输入:nData[]数据,x是带搜索数,left是最左边索引,right是最右边索引
@返回:数x所在的索引,-1表示不存在
*/
int BinarySearch(int nData[], int x, int left, int right)
{
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (nData[mid] < x)
            left = mid + 1;
        else if (nData[mid] > x)
            right = mid - 1;
        else
            return mid;
    }
    return -1;
}
/*
@二分搜索 要求数据已排序完毕 这是递归实现
@输入:nData[]数据,x是带搜索数,left是最左边索引,right是最右边索引
@返回:数x所在的索引,-1表示不存在
*/
int BinarySearch_recursion(int nData[], int x, int left, int right)
{
    if (left <= right)
    {
        int mid = (left + right) / 2;

        if (nData[mid] < x)
            BinarySearch_recursion(nData, x, mid + 1, right);
        else if (nData[mid]>x)
            BinarySearch_recursion(nData, x, left, mid - 1);
        else
            return mid;
    }
    return -1;
}
int main()
{
    int nArr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int nNum = BinarySearch_recursion(nArr, 5, 0, 9);
    cout << nNum << endl;
    int nArr1[] = { 100, 101, 102, 103, 104, 105, 106, 107, 108, 109 };
    int nNum1 = BinarySearch(nArr1, 102, 0, 9);
    cout << nNum1 << endl;

    return 0;
}

个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋。

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

数据搜索之二分查询 的相关文章

  • 【docker】dcoker-compose介绍

    文章目录 前言 一 Docker compose简介 1 docker compose基础概念 2 为什么要使用docker compose 二 YAML文件格式及编写注意事项 1 YAML文件格式 2 YAML格式的注意事项 3 YAML
  • 15.Xaml StackPanel控件 -->堆栈面板

    1 运行效果 2 运行源码 a Xaml源码
  • AIX7.1安装中文字符集

    为了安装中文字符集找了n多文章 下载n多安装包 就是没有一个好用的 所以跑官网上查询一翻 官网地址 https www ibm com support knowledgecenter zh ssw aix 71 install insgdr

随机推荐

  • 密码学的一些基本概念

    密码学是研究如何隐密地传递信息的学科 密码学的作用 机密性 是网络信息不泄露给非授权用户的特性 防止被动攻击 常用的保密技术包括 防侦听 防辐射 信息加密 物理保密等 完整性 完整性是网络信息未经授权不能进行改变的特性 完整性是一种面向信息
  • win7右键没有新建文本文档怎么办

    第一种方法 打开 开始 在搜索框内输入CMD 或者按快捷键WIN图标 R 复制reg add HKEY CLASSES ROOT txt ve d txtfile f 回车运行 再复制粘贴reg add HKEY CLASSES ROOT
  • numpy中设置始终使用定点表示法显示小数

    默认numpy会在某些情况触发科学计数法显示 scientific notation is used when absolute value of the smallest number is lt 1e 4 or the ratio of
  • 前置++和后置++的区别

    今天在阅读 google c 编程风格 的文档的时候 5 10 前置自增和自减 有一句话引起了我的注意 对于迭代器和其他模板对象使用前缀形式 i 的自增 自减运算符 理由是 前置自增 i 通常要比后置自增 i 效率更高 于是我查了查前置 和
  • 【C++学习第五讲】第一章总结 + 复习题(十一道)

    目录 第一章总结 一 总结 二 复习题 1 C 程序的模块叫什么 2 下面的预处理器编译指令的功能是什么 3 下面的语句的功能是什么 4 什么语句可以用来输出 hello world 然后开始新的一行 5 什么语句可以用来创建名为chees
  • TBDR下msaa 在metal vulkan和ogles的解决方案

    https developer arm com solutions graphics developer guides understanding render passes multi sample anti aliasing msaa在
  • 第十四届蓝桥杯大赛软件赛省赛(Java 大学B组)

    目录 试题 A 阶乘求和 1 题目描述 2 解题思路 3 模板代码 试题 B 幸运数字 1 题目描述 2 解题思路 3 模板代码 试题 C 数组分割 1 题目描述 2 解题思路 3 模板代码 试题 D 矩形总面积 1 问题描述 2 解题思路
  • (译)cocos2d-x跨android&ios平台开发入门教程

    免责申明 必读 本博客提供的所有教程的翻译原稿均来自于互联网 仅供学习交流之用 切勿进行商业传播 同时 转载时不要移除本申明 如产生任何纠纷 均与本博客所有人 发表该翻译稿之人无任何关系 谢谢合作 原文链接地址 http www raywe
  • Windows下小白安装Qt详细教程

    一 软件下载 官网下载地址 http download qt io 1 点击进入 2 archive 和 official releases 两个目录都有最新的 Qt 开发环境安装包 我们以 archive 目录里的内容为例来说明 点击进入
  • 太强大!发现一个数据分析老司机专用神器!

    去年秋招 字节跳动整体报录比降到了2 创造了150000人争3000岗位的盛况 今年909万毕业生再创新高 激烈程度可想而知 除了技术岗 大部分毕业生也瞄准了高薪高前景的数据分析师岗位 教育部关于高校毕业生就业工作通知 人才缺口 巨大 未来
  • 用python进行数据分析(一:数据理解)

    python作为当前主流的语言之一 他的功能是非常强大的 不论是在游戏行业还是数据分析行业还是软件开发啥的好像都可以用python 但作为一个数据分析师 并不需要用到他的全部功能 只是想要达到 能够用python完成数据分析工作 的效果来帮
  • 同步FIFO的verilog实现(2)——高位扩展法

    一 前言 在之前的文章中 我们介绍了同步FIFO的verilog的一种实现方法 计数法 其核心在于 在同步FIFO中 我们可以很容易的使用计数来判断FIFO中还剩下多少可读的数据 从而可以判断空 满 关于计数法实现同步FIFO的详细内容 请
  • logback 配置文件 XML 案例

    logback配置文件案例 1 实现功能 1 控制台输出日志 2 info warn error 三个级别的日志分文件输出 3 日志文件 按天 按文件大小 滚动保存 4 日志文件保存于 项目根目录下的 logs 目录下 2 具体配置
  • STM 32如何实现程序自加密

    在嵌入式应用开发中 应用开发完成后往往需要对芯片中的程序进行加密处理 用以保护程序安全 不至被竞争对手从芯片把程序固件考走 本节将给大学介绍一个如何实现程序自动给芯片加密功能 下面给大家介绍一个STM32 用程序给MCU加密码的方法 标准库
  • 解决stata安装外部命令报错cannot write in directory C:\Users\�ƿ���\ado\plus\_

    参考网址 https bbs pinggu org thread 10685955 1 1 html ado文件下没有plus文件夹 在do文件或命令行中输入以下三个命令 sysdir set PLUS D stata17 MP ado p
  • Search and Replace -- 搜索与替换的高级利器

    对于从事电脑无纸化办公拟文写作的朋友 随着文档的增多 要查找一个遗忘的文件犹如大海捞针 虽然Windows系统已有很强的搜索功能 但依然不能满足我们的要求 如Windows不能搜索WPS格式的文件 不能搜索数据库 而在第三方软件的帮助下便可
  • 【YOLO系列】YOLOv6论文超详细解读(翻译 +学习笔记)

    前言 YOLOv6 是美团视觉智能部研发的一款目标检测框架 致力于工业应用 论文题目是 YOLOv6 A Single Stage Object Detection Framework for Industrial Applications
  • Xilinx FPGA 学习笔记——时钟资源

    在Xilinx的FPGA中 时钟网络资源分为两大类 全局时钟资源和区域时钟资源 全局时钟资源是一种专用互连网络 它可以降低时钟歪斜 占空比失真和功耗 提高抖动容限 Xilinx的全局时钟资源设计了专用时钟缓冲与驱动结构 从而使全局时钟到达C
  • vue cli4.5.13项目兼容IE问题记录

    用脚手架安装项目后 IE遇到问题如下 一 报错1002 点击错误发现在socketjs client 办法 降低socketjs client 版本 npm install sockjs client 1 5 1 二 安装后 仍然白屏 按照
  • 数据搜索之二分查询

    数据搜索中 如果给定数据集是乱序的情况下一般我们使用顺序搜索按位查询是最常用的方法 但是一旦数据是顺序的 二分法则能大大减少数据搜索的工作量 尤其在几十万甚至上亿的数据量情况下 它的效率就能大大的体现 二分法的思想是通过每次把数据集所在小区