02 顺序查找

article/2025/10/12 15:35:34

顺序查找

  顺序查找也可以叫做线性查找。它对顺序表链表都适用。对于顺序表可以通过数组下标递增扫描每个元素;链表通过指针 next 依次扫描每个元素。顺序表通常分为:对一般的无序线性表的顺序查找和按关键字有序的线性表的顺序查找。

一般线性表的顺序查找

  基本思想:从线性表的一段开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足给定的条件,那么就查找成功,返回该元素在线性表中的位置;若已经查到了表的另一端,但是没有查找到符合条件的元素,那么久返回查找失败的信息。
  算法思想(正常版)

typedef struct {		//查找表的数据结构(顺序表)ElemType* elem;	//动态数组基址int TableLen;		//表的长度
}SSTable;//顺序查找
int Search_Seq(SSTable ST, ElemType key) {int i ;ST.elem[0] = key;			//哨兵for (i = 0; i < ST.TableLen && ST.elem[i] != key; ++i); {		//从后往前找//查找成功,则返回元素下标;查找失败则返回 -1return i == ST.TableLen ? -1 : i;}
}

算法图解
在这里插入图片描述

  算法思想(哨兵版)

typedef struct {		//查找表的数据结构ElemType* elem;	//元素存储空间基址,建表时按实际长度分配。0号单位留空	int TableLen;		//表的长度
}SSTable;	int Search_Seq(SSTable ST, ElemType key) {int i = 0;ST.elem[0] = key;			//哨兵for ( i = ST.TableLen; ST.elem[i] != key; --i);		//从后往前找return i;	//若表中不存在关键字为 key 的元素,将查找到 i为0时退出 for 循环
}

算法图解
在这里插入图片描述

  在上述算法中,将 ST.elem[0]称为“哨兵”。引入它的目的是使得Search_Seq内的循环不必判断数组是否会越界,因为满足i==О时,循环一定会跳出。需要说明的是,在程序中引入“哨兵”并不是这个算法独有的。引入“哨兵”可以避免很多不必要的判断语句,从而提高程序效率。

查找效率分析
在这里插入图片描述
  查找不成功时,与表中各关键字的比较次数显然是n+1次,从而顺序查找不成功的平均查找长度为ASL不成功= n+1。
  通常,查找表中记录的查找概率并不相等。若能预先得知每个记录的查找概率,则应先对记录的查找概率进行排序,使表中记录按查找概率由小至大重新排列。
  综上所述,顺序查找的缺点:是当n较大时,平均查找长度较大,效率低;优点:是对数据元素的存储没有要求,顺序存储或链式存储皆可。对表中记录的有序性也没有要求,无论记录是否按关键字有序,均可应用。同时还需注意,对线性的链表只能进行顺序查找

有序表的顺序查找

  若在查找之前就已经知道表是关键字有序的,则查找失败时可以不用再比较到表的另一端就能返回查找失败的信息,从而降低顺序查找失败的平均查找长度。
  假设表工是按关键字从小到大排列的,查找的顺序是从前往后,待查找元素的关键字为key,当查找到第i个元素时,发现第i个元素对应的关键字小于key,但第i+1个元素对应的关键字大于 key,这时就可返回查找失败的信息,因为第i个元素之后的元素的关键字均大于key,所以表中不存在关键字为key的元素。
  可以用如图7.1所示的判定树来描述有序顺序表的查找过程。树中的圆形结点表示有序顺序表中存在的元素;树中的矩形结点称为失败结点(若有n个结点,则相应地有n +1个查找失败结点),它描述的是那些不在表中的数据值的集合。若查找到失败结点,则说明查找不成功。
在这里插入图片描述
  在有序表的顺序查找中,查找成功的平均查找长度和一般线性表的顺序查找一样。查找失败时,查找指针一定走到了某个失败结点。这些失败结点是我们虚构的空结点,实际上是不存在的,所以到达失败结点时所查找的长度等于它上面的一个圆形结点的所在层数。查找不成功的平均查找长度在相等查找概率的情形下为
在这里插入图片描述
式中,q,是到达第j个失败结点的概率,在相等查找概率的情形下,它为 1/(n + 1); lj是第j个失败结点所在的层数。当n=6时,ASL 不成功 =6/2+6/7=3.86,比一般的顺序查找算法好一些。
注意,有序表的顺序查找和后面的折半查找的思想是不一样的,且有序表的顺序查找中的线性表可以是链式存储结构

在这里插入图片描述


http://chatgpt.dhexx.cn/article/QyF6Z17c.shtml

相关文章

【算法-查找之一】顺序查找

算法-查找之一顺序查找 查找-是最常见的数据操作之一&#xff0c;数据结构核心运算之一&#xff0c;其重要性不言而喻。顺序查找是人们最熟悉的查找策略&#xff0c;对于小规模的数据&#xff0c;顺序查找是个不错的选择。 1.顺序查找&#xff1a; 核心&#xff1a;从数据的第一…

查找算法——顺序查找

目录 ​一、算法介绍 1.算法思想 2.算法流程 二、算法实现 1.代码实现 2.测试用例及结果 三、效率分析 1.时间复杂度 2.空间复杂度 ​一、算法介绍 1.算法思想 顺序查找也称线性查找&#xff0c;其查找思想非常简单&#xff0c;只需对数组进行遍历并将待查找元素key…

索引表的顺序查找

索引表的顺序查找 基本策略 采用建立“目录”的形式&#xff0c;先查找目录&#xff0c;然后根据目录将需要的数据块读入内存&#xff0c;从而实现只需先对小部分数据进行查询&#xff0c;提高查找效率的效果 索引表的建立 将线索表中数据按关键字分为若干块&#xff08;块…

顺序表的查找

前言 首先在这里要解释一下&#xff0c;为什么将顺序表这一种数据结构分为多篇文章去编写。首先我的笔记是根据王道老师的计算机考研——数据结构的视频课程去学习的。其次&#xff0c;我觉得将一种数据结构的知识放在一篇文章中&#xff0c;文章会显得过于冗长&#xff0c;容…

查找(顺序查找)

在java的介绍中&#xff0c;我们常用的查找有两种 1.顺序查找&#xff1a;&#xff08;案例演示&#xff09; 2.二分查找&#xff1a;【二分法】 案例要求&#xff1a; 有一个数列&#xff1a;白眉鹰王&#xff0c;金毛狮王&#xff0c;紫衫龙王&#xff0c;青翼蝠王&#x…

CDH6.0.1高可用

CDH高可用主要是HDFS和YARN&#xff0c;在保证hdfs数据不丢失的情况下&#xff0c;即使有节点宕机&#xff0c;重启即可也不会有影响。 官网文档 目录 HDFS HAHue 设置Hive 设置YARN HAHive HAHBase HA HDFS HA 进入HDFS -> 操作 -> High Availability。 给备用NameNo…

clickhouse 三种高可用方案

简介 本文介绍三种高可用使用&#xff0c;及验证clickhouse的高可用性&#xff0c;三种方案分别如下&#xff1a; 不管是多分片还是多副本都是以集群方式部署&#xff0c;那么对外暴露多台Clickhouse服务&#xff0c;通常会通过LB方式使每台服务器能够均匀的接受到客户端的请…

【RocketMQ】集群的搭建与高可用

RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。 Master和Slave的区别&#xff1a;在Broker的配置文件中&#xff0c;参数brokerId的值为0表明这个Broker是Master&#xff0c;大于0表明这个Broker是Slave&#xff0c;同时brokerRole参数也会说明这个Broker是Mas…

Sentry 高可用部署

Sentry 高可用部署&#xff0c;部署分析基于Sentry 10.1.0.dev 05e720a7 对应dockerhub镜像版本分别为&#xff1a; getsentry/snuba:31c967e774759c0548652d986645fdff844e0a39 getsentry/sentry:8549f2a492c803bab77af26e7417272975b9369a getsentry/symbolicator:94cdbb7b54…

HA高可用

什么事应用程序的高可用 高可用性(high availability)通常用来描述一个系统经过专门的设计,从而减少停工的时间,而保持其服务的高度可用性 高可用程序的类型 主从方式(冷备) 两个相同的应用程序,一个对外提供服务,成为主程序,另一个平时不运行为备程序,就是一个主程序的备份,…

harbor高可用部署

harbor高可用简介 harbor目前有两种主流的高可用方案&#xff1a; 双主复制&#xff0c;harbor自带的镜像复制功能多harbor实例共享后端存储 双主复制架构在遇到大镜像时有同步延迟&#xff0c;并且一个实例故障后需要手动重新开启复制策略才能再次同步&#xff0c;下面以阿里…

HADOOP 高可用搭建

首先先说一下大概的步骤&#xff0c;就用四台为例&#xff0c;简单适合新手操作。 流程是&#xff1a;创建虚拟机&#xff0c;配置好&#xff1b;搭建linux系统&#xff1b;安装jdk&#xff08;因为后面好多都依赖jkd&#xff09;&#xff1b;免密登录ssh&#xff1b;安装zook…

高可用详细概念及三种决策方式分析

文章目录 1.基本概念1.计算高可用2.存储高可用高可用状态决策1.独裁式2.协商式3.民主式 1.基本概念 这个定义的关键在于“无中断”&#xff0c;但恰好难点也在“无中断”上面&#xff0c;因为无论是单个硬件还是单 个软件&#xff0c;都不可能做到无中断&#xff0c;硬件会出故…

Nacos实现高可用

由于Nacos暂不支持Arm架构芯片的Mac集群搭建&#xff0c;本小节用Linxu云主机&#xff08;Nacos比较吃内存&#xff0c;2个Nacos服务器集群&#xff0c;至少2G内存&#xff09;环境演示。 通过前面的学习&#xff0c;我们已经了解了如何使用Nacos以及Nacos的功能等&#xff0c;…

浅谈高可用测试

前言 现今的互联网产品越来越注重可靠性&#xff0c;尤其是在生产环境中使用的系统&#xff0c;对高可用性都有一定的要求。而作为产品的提供方&#xff0c;在交付产品之前&#xff0c;也会对高可用进行验收测试。近期跟进过两个产品曾有高可用测试的需求&#xff0c;在此简单…

nginx高可用

Nginx高可用 为什么要使用nginx的高可用&#xff1a;因为nginx作为反向代理服务器时&#xff0c;有可能出现宕机的情况&#xff0c;而由于其反向代理的特性&#xff0c;就会导致其他服务器&#xff08;tomcat等&#xff09;无法被访问&#xff0c;这样项目就停止工作了。但是使…

RabbitMQ高可用

RabbitMQ高可用 各种消息队列对比使用推荐 RabbitMQ 高可用普通集群模式镜像集群模式保证消息队列的幂等性(消息不被重复消费)消息队列的可靠性传输生产者丢失数据RabbitMQ丢失数据消费者丢失数据 保证消息的顺序性消息积压问题 各种消息队列对比 特性ActiveMQRabbitMQRocketM…

系统高可用

系统高可用 1. 什么是高可用&#xff1f;可用性的判断标准是啥&#xff1f;1.1 可用性的判断标准是啥&#xff1f; 2. 哪些情况会导致系统不可用&#xff1f;3. 有哪些提高系统可用性的方法&#xff1f;3.1 注重代码质量&#xff0c;定时Review代码3.2 使用集群&#xff0c;减少…

HBase高可用

一、HBase高可用简介 HBase集群如果只有一个master&#xff0c;一旦master出现故障&#xff0c;将导致整个集群无法使用&#xff0c;所以在实际的生产环境中&#xff0c;需要搭建HBase的高可用&#xff0c;也就是让HMaster高可用&#xff0c;也就是需要再选择一个或多个节点也…

你管这破玩意儿叫高可用

大家好&#xff0c;我是坤哥 今天我们来聊一下互联网三高&#xff08;高并发、高性能、高可用&#xff09;中的高可用&#xff0c;看完本文相信能解开你关于高可用设计的大部分困惑 前言 高可用&#xff08;High availability&#xff0c;即 HA&#xff09;的主要目的是为了保障…