查找(一)-----顺序表的顺序查找和折半查找

article/2025/10/12 13:48:31

顺序表的顺序查找:

基于顺序表,查找指定的key元素, 给出三种:返回它的索引值(否则返回-1), 判断是否存在这个值(存在返回true, 否则false),查找(存在返回这个元素的值, 不存在返回-1)。就是对这个顺序表进行遍历。从第一个元素开始和指定的元素做比较。

参考代码:

public class SeqSearch<T> {public static void main(String[] args) {SeqSearch<String> seq = new SeqSearch<String>();seq.init("one");seq.init("two");seq.init("three");seq.init("four");System.out.println(seq.contains("4"));System.out.println(seq.indexOf("three"));System.out.println(seq.search("two"));}private int DEFAULT_SIZE = 20;private Object[] elements;private int length;private int j;public SeqSearch(){this.length = DEFAULT_SIZE;elements = new Object[length];}public SeqSearch(int size){this.length = size;this.elements = new Object[length];}public void init(T data){ if(j > length - 1){throw new IndexOutOfBoundsException("数组已满!");}elements[j ++] = data;}public int indexOf(T key){if(key != null){for(int i = 0; i < this.length; i ++){if(key.equals(elements[i])){// 防止出现空指针异常return i;}}}return -1;// 空表或则无此对象	}public T search(T key){// 返回这个元素int res = indexOf(key);return res == -1 ? null : (T)this.elements[res];}public boolean contains(T key){return indexOf(key) >= 0;}
}

测试结果:


折半查找:

顺序表的查找是直接遍历, 复杂度是随着这个元素的位置呈线性关系的。所以针对那些已经排好序的顺序表,可以使用折半查找方式,每次取一般,缩小范围。 类似于二叉搜索树(参考:点击打开链接)。

可以采用递归和非递归的方法:(非递归在方法内部直接使用循环,直到找到这个数输出结果。递归就是不断调用这个函数本身即可)。

参考代码:

public class BSArray {public static void main(String[] args) {int [] arrays = {1, 3, 4, 6, 7, 9 , 11};System.out.println(binarySearch(arrays, 0, arrays.length - 1, 6));System.out.println(binarySearchRecur(arrays, 0, arrays.length - 1, 7));}//非递归public static int binarySearch(int a[], int low, int high, int key){int l = low, h = high, midst;while(l <= h){midst = (l + h) / 2;if(key == a[midst]){return midst;}else if(a[midst] > key){h = midst - 1;}else{l = midst + 1;}}return -1;}// 递归public static int binarySearchRecur(int a[], int low, int high, int key){if(low > high) {return -1;}else{int	midst = (low + high) / 2;if(key == a[midst]){return midst;}else if(a[midst] > key){return binarySearchRecur(a, low, midst - 1, key);}else{return binarySearchRecur(a, midst + 1, high, key);}}}
}

测试结果:




以上就是这篇的内容。欢迎提出疑问或者错误所在,谢谢!



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

相关文章

查找算法之顺序表

1、概念: 顺序查找(Sequential Search)又叫线性查找&#xff0c;是最基本的查找技术&#xff0c;它的查找过程是&#xff1a;从表中第一个&#xff08;或最后一个)记录开始&#xff0c;逐个进行记录的关键字和给定值比较&#xff0c;若某个记录的关键字和给定值相等&#xff0…

C语言实现顺序查找

概述&#xff1a; 顺序查找的查找过程为:从表中最后一个记录开始&#xff0c;逐个进行记录的关键字和给定值的比较&#xff0c;若某个记录的关键字和给定值比较相等&#xff0c;则查找成功&#xff0c;找到所查记录&#xff1b;反之&#xff0c;若直至第一个记录&#xff0c;其…

顺序查找(算法学习)

​ ​ 活动地址&#xff1a;CSDN21天学习挑战赛 学习日记 一&#xff0c;顺序查找 1&#xff0c;什么是查找 查找就是从从某个数据结构中找出指定条件的元素&#xff0c;找到满足的条件元素便表示查找成功&#xff0c;反之代表查找失败&#xff0c;查找的方式也会根据元素所处…

顺序查找算法(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;下面以阿里…