顺序查找(算法学习)

article/2025/10/12 13:58:46


活动地址:CSDN21天学习挑战赛

学习日记


一,顺序查找

1,什么是查找

查找就是从从某个数据结构中找出指定条件的元素,找到满足的条件元素便表示查找成功,反之代表查找失败,查找的方式也会根据元素所处的数据结构的不同而出现不同的查找方式

2,查找方式

1、顺序查找(sequential search)是一种最简单的查找方法,一般用于数组。他从顺序表的一端开始依次将每个元素值同给定的值进行比较,若找到则返回该元素所在的下标;否则返回特定值,表示查找失败。时间复杂度O(n)。
对顺序查找算法的一个改进,可在表的尾端设置一个“岗哨”,即在查找之前把给定值x赋给数组a[]中下标为n的元素,这样在循环中就不必进行下标是否越界的检查,当比到下标为n的元素位置时,由于a[n]=x必然成立,则退出循环。

c#代码实例

 static void Main(string[] args){int[]  a = {1,2,3,4,5,6,7,8,9,10 };foreach (int item in a){if (string.Equals(item,9)){Console.WriteLine(item);break;}}}

2、二分查找(binary search)又称折半查找。作为二分查找对象的数据必须是顺序存储的有序表,通常假设若关键字是字符或者字符串数据,则按照国际双字节编码(Unicode)有序。
二分查找的过程是:首先取整个有序表的中点元素,同x比较,若小于给定值则在坐子表中,否则在有子表中;这样经过依次查找就将缩短一半的查找空间,直到找到x元素或者当前查找元素为空。

c#代码实例

static void Main(string[] args){int[]  a = {1,2,3,4,5,6,7,8,9,10,11 };int low = 0, high = a.Length - 1;while (low <= high){int mid = (low + high) / 2;if (a[mid] > 9){high = mid - 1;Console.WriteLine(high);}else if (a[mid] < 9){low = mid + 1;Console.WriteLine(low);}else{Console.WriteLine(a[mid]);break;}}Console.ReadLine();}

二分查找过程可用一颗二叉树来描述:树中的每个根节点对应当前查找区间的中点元素a[mid],它的左子树和右子树分别对应该区间的坐子表和右子表,通常把此二叉树称为二分查找的判定树。进行二分查找的二叉树是一颗二叉搜索树,而且是一颗理想平衡树。
二分查找的时间复杂度是O(log2 n)。

3、索引查找(index search)又称分级查找。索引查找是在索引表和主表上进行的查找,过程为:首先根据给定的索引值K1,在索引表上查找索引值等于K1的索引项,以确定对应子表在主表中的开始位置和长度,然后再根据给定值K2,在对应的子表中查找等于K2的元素。对索引表或者子表进行查找时,若表是顺序存储的有序表,则既可以进行顺序查找也可以进行二分查找。


4、分块查找(blocking search)属于索引查找。他要求每个主表中每个子表之间递增有序,即前块中的最大关键字必须小于后块中的最小关键字,但是每个块中的元素排列次序可以是任意的。进行分块查找时,应根据所给的关键字首先查找索引表,从中查找刚好大于等于所给关键字的那个索引项,从而找到待查块,然后再查找这个块,从中顺序查找到相应的记录。


5.散列查找
散列(hash)存储的方法是:以数据集合中的每个元素的关键字k为自变量,通过一种函数h(k)计算出函数值,把这个值用作一块连续存储空间中的元素存储位置(下标)。
构造散列函数的目标是使得散列地址尽可能均匀地分布在散列地址的空间上,同时使得计算尽可能简单,以节省计算时间。

常用的散列函数有:
直接定址法 h(k)=k+C;
除留余数法 h(k)=k%m,m是散列长度
数字分析法 取关键字中某些取值较分散的数字作为散列地址的方法。
平方取中法 取关键字平方的中间几位作为散列地址的方法。
折叠法  首先将关键字分割成位数相同的几段(最后一段的位数不足应补0),段的位数取决于散列地址的位数,然后将他们的叠加和作(舍去最高位进位)为散列地址的方法。
从散列表中查找关键字为key的过程就是一个按照查找路径进行顺序查找的过程,若找到则返回相应的元素值,否则返回空值表示查找失败。
6.B树查找
B树是一种具有特殊结构的树,他同二叉树和一般树在结点结构上有所不同。B树分为B-树和B+树。


B_树是一种特殊的多叉树,被称为多路查找树。B_树是一中在数据库和文件系统中最常用的动态索引结构。对于树根节点他最少有两颗子树,最多有m棵子树,对于非树根节点,他最少有m/2向上取整棵子树,最多m棵子树,叶子结点中的子树均为空树;每个节点的关键字个数最少为m/2向上取整-1,最多为m-1个;在B_树的结点结构中,每个关键字域的后面还应包含一个元素引用域,用以存储该关键字所对应元素的引用。
B_树的查找一个关键字K的过程:若B_树非空,首先取出树根结点,使给定值K依次同该结点中的每一个关键字进行比较,直到K<=Ki(假定用Ki作为终止标志,保存比所有关键字都大的一个特定值,该值不妨用MaxKey常量表示)为止,此时若K=Ki,则表明查找成功,返回具有该关键字Ki的记录的存储位置,否则其值为K的关键字只能落在该结点的有Pi-1所指的子树上,接着只要在该子树上继续进行查找即可;这样,每取出一个节点比较后就下移一层,直到查找成功,或被查找的子树为空为止。


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

相关文章

顺序查找算法(SequentialSearch)

顺序查找算法&#xff08;SequentialSearch&#xff09; 1、SequentialSearch算法描述 查找算法是一种在数字列表中确定目标所在位置的算法。假设给定一个目标元素 x 和一个包含元素 x 的数字列表&#xff08;例如 5、1、3、x、7 &#xff09;&#xff0c;然在该数字列表中找到…

数据结构-查找-顺序查找法

在数据处理的过程中&#xff0c;是否能在时间内查找到所需要的数据是一个相当值得重视的问题。所谓查找(search)&#xff0c;指的是在数据文件中找出满足某些条件的记录。用以查找的条件称作为“键值(Key)”&#xff0c;就如同排序所用的键值一样。 常见的查找方法 根据数据量…

【查找】顺序查找

顺序查找 定义&#xff1a;顺序查找就是在文件的关键字集合key[1,2,…,n]中找出与给定的关键字key相等的文件记录。 步骤&#xff1a; 1.从文件的第一个记录开始&#xff0c;将每个记录的关键字与给定的关键字key进行比较&#xff1b; 2.如果查找到某个记录的关键字等于key&am…

有序顺序表的查找

有序顺序表的查找 一、 1.初始化一个顺序表 2.对顺序表进行顺序查找 3.建立一个有序顺序表 4.对有序顺序表进行折半查找 二、 1.首先建立一个结构体以便顺序表的使用&#xff0c;利用顺序查找算法的思想&#xff0c;我们把要查找的数存在List->data[0]&#xff0c;从顺序表…

顺序表的查找——按位查找和按值查找

数据结构学习中&#xff0c;记录学习过程&#xff0c;顺便分享给学习中的你&#xff01; 感谢你的关注、点赞、收藏支持&#xff01; 1.按位查找 //按位查找 时间复杂度O(1) #define InitSize 10 typedef struct{ElemType *data;int MaxSize;int length; } SeqList;ElemTyp…

02 顺序查找

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

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

算法-查找之一顺序查找 查找-是最常见的数据操作之一&#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;…