数据结构 - 查找算法

news2024/9/24 13:05:17

一.查找的概念

二.顺序表查找

特点:

        1.记录的数据可以是无序

        2.当数据量较大时,查找效率低,需要依次遍历

/**
 * @description:            顺序表查找算法,从后往前查找
 * @param - a       :       要操作的数组的指针
 * @param - key     :       指定查找的内容
 * @return          :       成功则返回(元素的下标) , 失败返回(-1)
*/
int Seqsearch(int *a,int key)
{
    int i;

    /* 从后到前依次遍历 */
    for(i = N-1; i >= 0; i--)
    {
        if(a[i] == key)             //若找到了则直接返回
        {
            return i;
        }
    }

    return -1;
}

三.二分法查找

特点:

        1.数据必须是有序的。

/**
 * @description:            二分法查找算法
 * @param - a       :       要操作的数组的指针
 * @param - key     :       要查找的内容
 * @return          :       成功则返回该元素的序号,失败则返回 -1
*/
int Binsearch(int *a,int key)
{
    /* low 表示区间下界 , high 表示区间上界 */
    static int low,high,mid;

    low = 0;
    high = N - 1;
    
    /* 循环执行二分法 */
    while(low <= high)
    {
        mid = (low + high) / 2;         //获取中间元素的下标

        /* 1.若下标为 mid 的元素 == key  */
        if(key == a[mid])
            return mid;

        /* 2.若下标为 mid 的元素 > key , 则表示要查找的元素在 mid 的左边 */
        if(key < a[mid])
        {
            high = mid - 1;
        }

        /* 3.若下标为 mid 的元素 < key , 则表示要查找的元素在 mid 的右边 */
        else if(key > a[mid])
        {
            low = mid + 1;
        }

    }

    return -1;
}

三.哈希表查找

1.哈希表定义

        存储记录时,有意的建立 key 与记录的存储位置之间的关系,以构建哈希表。

2.构建哈希表

(1).选取恰当的哈希函数

        尽可能将记录均匀分布,以减少冲突现象的发生。

        ①.直接地址法(不常用)

        ②.数字分析法(不常用)

        ③.平方取中法

        ④.叠加法
        ⑤.保留余数法(常用)
        ⑥.随机函数法

(2).处理冲突

        ①.开放地址法

        
②.链地址法

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV_自定义线性滤波(filter2D)应用详解

OpenCV filter2D将图像与内核进行卷积&#xff0c;将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时&#xff0c;该函数根据指定的边界模式插值异常像素值。 卷积核本质上是一个固定大小的系数数组&#xff0c;数组中的某个元素被作为锚点&#xff08;一般…

安霸cv22平台移植采坑记录

主要分为3部分&#xff1a; 1.数据输入部分&#xff1a; 1.因原始测试代码只是单张测试图片&#xff08;测试格式&#xff1a;安霸平台离线转的bin文件&#xff09;&#xff0c;现在的问题是&#xff1a;如何输入数据流&#xff1f;会不会涉及到字节对齐问题&#xff0c;如何…

ROS第六梯:ROS+VSCode+C++消息发布和订阅

第一步&#xff1a;创建ROS工作空间&#xff0c;并在工作空间下创建名为srr_pkg的功能包&#xff0c;具体步骤参考第二章。 第二步&#xff1a;在src下创建publisher.cpp作为发布节点代码文件&#xff0c;创建subscriber.cpp作为订阅节点代码文件&#xff1a; 主要步骤是&#…

这几个方法轻松压缩ppt文件大小,操作起来很简单的压缩PPT方法

这几个方法轻松压缩ppt文件大小。在当今信息化迅速发展的时代&#xff0c;PPT已成为工作和学习中必不可少的工具。然而&#xff0c;随着内容的增加&#xff0c;文件体积常常变得庞大&#xff0c;影响了分享和传输的便利性。过大的文件不仅占用存储空间&#xff0c;还可能导致演…

Nat Med|机器学习+高通量筛选,发现用于治疗胶质母细胞瘤的神经活性药物|顶刊精析·24-09-23

小罗碎碎念 今日顶刊&#xff1a;Nat Med 这篇文章是2024-09-20发表在《Nature Medicine》上的一篇研究型论文&#xff0c;标题为“High-throughput identification of repurposable neuroactive drugs with potent anti-glioblastoma activity”。 先打个提前量&#xff0c;发…

Java刷题知识总结(一)

1.局部变量参与运算前是必须要初始化的&#xff0c;比如下面的代码就会编译出错&#xff0c;提示y必须要初始化。 public static void main(String[] args) {int x 1;int y;int z x y; } 2.ArrayList和Vector主要区别是什么&#xff1f; A Vector与ArrayList一样&#xf…

Win11+cuda11.7+spconv11.7搭建OpenPCdet

这里写自定义目录标题 前面詳細的教程參考&#xff1a;https://blog.csdn.net/xuegreat1/article/details/141892867 懶得寫了&#xff0c;先寫遇到的一些教程外的bug&#xff1a; 上文教程走完后運行demo.py&#xff0c;但是發現沒有裝mayavi庫&#xff0c;直接安裝報錯&#…

【STM32】PWM

一、 PWM 概述 定义 PWM&#xff08;Pulse Width Modulation&#xff09;&#xff0c; 脉冲宽度调制。 脉冲&#xff1a; 方波&#xff0c; 频率(freq) 宽度&#xff1a; 高电平的宽度&#xff0c; 占空比(duty) ​ 详细波形如下图。 用途 控制灯光的亮度&#xff08;手机/平…

ASP.NET Core8.0学习笔记(十九)——EF Core DbSet

一、DbSet概述 1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。 2.使用DbSet<T>进行查询的方法&#xff1a; (1)直接在DbContext中创建对应的DbSet<T>属性 (2)使用DbSet DbContext.Set<T>方法操作数据表。…

红外图像绝缘子识别数据集

红外图像绝缘子识别数据集&#xff0c;数据集一共919张图片&#xff0c;标注为voc格式&#xff0c;可以转yolo格式 数据集名称 红外图像绝缘子识别数据集 (Infrared Insulator Recognition Dataset, IIRD) 数据集描述 IIRD是一个专为电气工程领域设计的小规模红外图像数据集…

【iOS】MVC架构模式

文章目录 前言MVC架构模式基本概念通信方式简单应用 总结 前言 “MVC”&#xff0c;即Model&#xff08;模型&#xff09;&#xff0c;View&#xff08;视图&#xff09;&#xff0c;Controller&#xff08;控制器&#xff09;,MVC模式是架构模式的一种。 关于“架构模式”&a…

老包莫名被暂停、删除?Google Play审核这些坑你踩了吗?

相信很多开发者都经历过这样的“晴天霹雳”&#xff1a;自己辛辛苦苦维护多年的应用&#xff0c;突然之间被Google Play暂停或直接删除&#xff0c;理由是“欺骗行为”。收到这样的邮件&#xff0c;开发者往往是一脸懵逼&#xff0c;尤其是那些在架时间长、老老实实运营的“老包…

工作缺乏目标管理,执行力不够用怎么办

在工作中&#xff0c;缺乏目标管理和执行力不够是许多人常常面临的问题。这不仅会影响工作效率&#xff0c;还可能阻碍个人职业发展和团队的整体进步。那么&#xff0c;当我们发现自己处于这样的困境中时&#xff0c;应该怎么办呢&#xff1f; 1、明确并设定SMART目标 明确自己…

缓存装饰器@cached_property

这个装饰器好像在好多包里都有&#xff0c;我在阅读源码的过程中&#xff0c;transformers.utils也有这个。查阅资料&#xff0c;大体上了解了它的用法。参考&#xff1a;[python]cached_property缓存装饰器 - faithfu - 博客园 这个装饰器用在类里面的某个方法前面&#xff0…

科研绘图系列:R语言堆积图(stacked barplot)

文章目录 介绍加载R包导入数据数据预处理画图导出数据系统信息介绍 微生物堆积图是一种数据可视化工具,通常用于展示微生物群落中不同物种的相对丰度。这种图表通过将每个样本中的微生物按照其分类学等级(如门、属等)进行分类,并以不同颜色的块状图表示,每个块的大小代表…

【TabBar嵌套Navigation案例-产品推荐-CollectionView的layout设置 Objective-C语言】

一、我们接着来做这个产品推荐页面啊 1.我们之前,把这个产品推荐页面做出来了,就是长的丑了点儿,所以呢,我们需要去给它设置一下itemSize啦,等等一些东西, 好,首先呢,在这个里边,我们找到我们的layout这块儿, 然后呢,这个layout里边,我们一个一个来设置, 首先呢…

vmware 虚拟机多屏幕或添加屏幕

vmware 虚拟机多屏幕或添加屏幕 前置条件 vmware 安装 vmware tools 虚拟机系统支持多屏幕 物理上有至少两个屏幕&#xff0c;就是物理机上接至少一个屏幕 方法 虚拟机上点设置&#xff0c;需要在虚拟机关机时进行 ctrl alt enter 让当前虚拟机全屏 鼠标移动到屏幕虚拟机…

在 Vue 3 中实现“折叠”与“展开”文本内容

偶然间遇到一个场景&#xff0c;怎么判断一段文本是否超过 5 行或者指定行数&#xff0c;并在超过时显示 "展开/收起" 按钮。那应该如何实现呢&#xff1f; 在 Vue 3 的项目下实现&#xff1a; <template><div class"text-container"><di…

数位dp(算法篇)

算法篇之数位dp 数位dp 概念&#xff1a; 数位dp是一种计数用的dp&#xff0c;一般是要统计一个区级[l,r]内满足一些条件的数的个数所谓数位dp&#xff0c;就是对数位进行dp&#xff0c;也就是个位、十位等相对于普通的暴力枚举&#xff0c;数位dp快就快在它的记忆化&#x…

牛客小白月赛101(上)

tb的区间问题 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行代码 #include <iostream> #include <climits>using namespace std;int main() {int n, k;cin >> n >> k;int arr[50000];for (int i 0; i < n; i) {cin >> arr[i];}int …