查找算法——顺序查找

article/2025/10/12 15:33:25

目录

​一、算法介绍

1.算法思想

2.算法流程

二、算法实现

1.代码实现

2.测试用例及结果

三、效率分析

1.时间复杂度

2.空间复杂度


​一、算法介绍

1.算法思想

顺序查找也称线性查找,其查找思想非常简单,只需对数组进行遍历并将待查找元素key与数组内元素逐个比较即可,若相同则查找成功返回对应数组下标;若遍历完整个数组也没有找到待查找元素,则说明查找失败,返回-1。

2.算法流程

例:给定一个数组arr[]={2,5,4,8,9,7},查找元素8,成功返回元素对应数组下标,失败返回-1。

若采用上述示例查找元素10,则通过循环比较完数组arr中6个元素后,仍未找到待查找元素,则退出循环并返回-1。

二、算法实现

1.代码实现

#include<iostream>
using namespace std;int SeqSearch(int* arr, int size, int key) {//顺序查找for (int i = 0; i < size; i++) {if (arr[i] == key) {return i;}}return -1;
}void Test() {//测试函数int arr[] = { 2,5,4,8,9,7 };int length = sizeof(arr) / sizeof(arr[0]);//获取数组内元素个数int key;cout << "请输入待查找元素:";cin >> key;int result = SeqSearch(arr, length, key);//调用顺序查找函数if (result == -1) {cout << endl << "查找失败!" << endl;cout<<"集合中没有待查找元素!" << endl;}else {cout << "查找成功!" << endl;cout << "元素" << key << "所在位置下标为" << result << "!" << endl;}
}int main() {Test();return 0;
}

2.测试用例及结果

arr[]={2,5,4,8,9,7}

查找元素8:

 查找元素7:

查找元素10:

 

三、性能分析

1.时间复杂度

最坏情况:

待查找元素位于集合末尾位置或查找失败时,程序需遍历完整个集合才能退出,此时的循环次数与集合元素个数n有关,所以时间复杂度为O(n)。

最好情况:

最理想的情况就是待查找元素位于集合的第一个位置,程序只需执行一次循环和比较就成功找到待查找元素并返回退出,所以时间复杂度为O(1)。

平均情况:

综合两种情况,顺序查找的时间复杂度为O(n)。

2.空间复杂度

算法中只需设置一个临时变量用于控制循环次数和数组下标变化,没有借助额外的辅助空间,所以空间复杂度为O(1)。

四、优化方案

1.优化思想

考虑到顺序查找的思想是通过顺序比较集合元素的方法进行查找,所以我们可以通过设置两个索引从集合的两边进行同时比较查找,这样每次循环就可以比较淘汰两个元素,从而一定程度上的提高算法效率。

2.代码实现

#include<iostream>
using namespace std;int Optimized_SeqSearch(int* arr, int size, int key) {//顺序查找优化版本int index1 = size - 1;//右侧索引int index2 = 0;//左侧索引while (index2 <= index1) {//相等位置也需要比较if (arr[index1] == key) {return index1;}if (arr[index2] == key) {return index2;}index1--;index2++;}return -1;
}void Test() {//测试函数int arr[] = { 2,5,4,8,9,7 };int length = sizeof(arr) / sizeof(arr[0]);//获取数组内元素个数int key;cout << "请输入待查找元素:";cin >> key;//int result = SeqSearch(arr, length, key);//调用顺序查找函数int result = Optimized_SeqSearch(arr, length, key);//调用顺序查找函数if (result == -1) {cout << endl << "查找失败!" << endl;cout<<"集合中没有待查找元素!" << endl;}else {cout << "查找成功!" << endl;cout << "元素" << key << "所在位置下标为" << result << "!" << endl;}
}int main() {Test();return 0;
}

3.测试用例及结果

arr[]={2,5,4,8,9,7}

查找元素8:

查找元素7:

 

查找元素0:

 

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


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

相关文章

索引表的顺序查找

索引表的顺序查找 基本策略 采用建立“目录”的形式&#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;的主要目的是为了保障…

什么是高可用?高可用介绍:

前言&#xff1a; 高可用&#xff08;High availability&#xff0c;即 HA&#xff09;的主要目的是为了保障「业务的连续性」&#xff0c;即在用户眼里&#xff0c;业务永远是正常&#xff08;或者说基本正常&#xff09;对外提供服务的。高可用主要是针对架构而言&#xff0c…

HTML Responsive Web Page

注&#xff1a;参考网站 https://www.w3schools.com HTML Responsive Web Page index.html <!DOCTYPE html> <html><head><link rel"stylesheet" href"style.css"><title>Responsive web page</title><meta lan…