C语言经典算法之顺序查找算法

目录

前言

A.建议

B.简介

一 代码实现

二 算法时空复杂度

A.时间复杂度:

B.空间复杂度:

三 优点和缺点

A.优点:

B.缺点:

四 现实中的应用


前言

A.建议

1.学习算法最重要的是理解算法的每一步,而不是记住算法。

2.建议读者学习算法的时候,自己手动一步一步地运行算法。

tips:文中的对数均以2为底数

B.简介

顺序查找是一种简单的查找算法,也称为线性查找。它的基本思想是逐个检查待查找元素是否与数组中的元素相等,直到找到目标元素或搜索完整个数组。

一 代码实现

#include <stdio.h>// 顺序查找函数
int sequentialSearch(int arr[], int n, int target) {for (int i = 0; i < n; i++) {if (arr[i] == target) {return i;  // 找到目标元素,返回索引}}return -1;  // 未找到目标元素,返回-1
}int main() {int arr[] = {2, 5, 8, 12, 16, 23, 38, 45, 56, 72};int n = sizeof(arr) / sizeof(arr[0]);int target = 23;int result = sequentialSearch(arr, n, target);if (result != -1) {printf("目标元素 %d 在数组中的索引是 %d\n", target, result);} else {printf("未找到目标元素 %d\n", target);}return 0;
}

这个例子中,sequentialSearch 函数接受一个整数数组、数组长度和目标元素作为参数,返回目标元素在数组中的索引。在 main 函数中,我们定义了一个数组,调用 sequentialSearch 函数来查找目标元素的位置,并输出查找结果。

二 算法时空复杂度

A.时间复杂度:

在最坏的情况下,顺序查找需要遍历整个数组才能确定目标元素是否存在。因此,最坏情况下的时间复杂度是O(n),其中n是数组的长度。

最好情况发生在目标元素在数组的第一个位置,此时算法只需要一次比较就找到了目标元素。因此,顺序查找算法的最好时间复杂度为 O(1)

在平均情况下,假设目标元素在数组中的位置是等概率的,则平均查找次数为 (n+1)/2。因此,平均情况下的时间复杂度也是O(n)

B.空间复杂度:

顺序查找算法是原地算法,它不需要额外的空间来存储中间结果,只需要少量的额外空间用于存储变量和参数。因此,空间复杂度是O(1)。

三 优点和缺点

A.优点:

简单直观: 顺序查找是一种直观且易于理解的查找算法,无需复杂的数据结构或算法设计。

适用于小规模数据: 在小规模数据集中,顺序查找的性能相对较好,因为它的常数因子较小,不会引入过多的开销。

适用于无序数据: 顺序查找不依赖于数据的有序性,适用于无序的数据集。

B.缺点:

时间复杂度高: 在最坏情况下,顺序查找需要遍历整个数据集,因此其最坏时间复杂度是O(n),其中 n 是数据集的大小。对于大规模数据集,性能相对较差。

不适用于有序数据: 如果数据集是有序的,其他更高效的查找算法,如二分查找,通常会更加适用。顺序查找在这种情况下的性能不如一些针对有序数据设计的算法。

性能对数据分布敏感: 顺序查找的性能受到数据分布的影响。如果目标元素在数据集的前部分,性能相对较好;如果目标元素在后部分,性能较差。

四 现实中的应用

应用场景如下:

小规模数据集: 当数据集规模较小,且没有明显的顺序结构时,顺序查找可能是一种简单而直观的选择。由于顺序查找的时间复杂度是线性的,对于小规模数据,性能影响相对较小。

无序数据集: 如果数据集是无序的,而且没有其他信息可以利用,顺序查找是一种合理的选择。在这种情况下,其他更复杂的算法可能不会带来太大的优势,因为它们的性能可能会受到数据分布的影响。

调试和验证: 顺序查找可以用于验证其他更高级查找算法的正确性。在实现更复杂的算法之前,可以使用顺序查找验证预期的结果。

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

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

相关文章

常见的反爬虫风控 | 验证码风控

一.前言 在当今信息技术迅速发展的背景下&#xff0c;网站和在线服务面临着日益增长的自动化访问威胁&#xff0c;这些大多来自于各类爬虫程序。这种大量的自动化访问不仅对网站的正常运行构成压力&#xff0c;还可能导致敏感数据的泄露&#xff0c;甚至被用于不正当竞争和恶意…

多表关联查询

基本信息&#xff1a; 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下&#…

PHP反序列化漏洞-魔术方法绕过

一、__wakeup()魔法函数绕过: 在PHP中,__wakeup()是一个魔术方法,用于在反序列化对象时自动调用。当反序列化字符串中的对象属性个数大于实际属性个数时,可以利用这个漏洞进行绕过。 触发条件: PHP版本为5.6.25或早期版本,或者PHP7版本小于7.0.10。反序列化字符串中的对…

C++大学教程(第九版)5.15修改GradeBook

目录 题目 代码 运行命令&#xff08;在控制台输入&#xff09; 运行截图 题目 &#xff08;修改GradeBook&#xff09;修改图5.9~图5.11所示的 GradeBook 程序&#xff0c;使它计算一组成绩的平均成绩。 成绩A为4分&#xff0c;成绩B为3分&#xff0c;依次类推。 A:4 B:3…

transbigdata 笔记: 轨迹密集化/稀疏化 轨迹平滑

1 密集化 transbigdata.traj_densify(data, col[Vehicleid, Time, Lng, Lat], timegap15) 轨迹致密化&#xff0c;保证至多每隔timegap秒都有一个轨迹点 这边插补使用的是pandas的interpolate&#xff0c;method设置的是index 1.1 举例 transbigdata 笔记&#xff1a; 官方…

开发实践7_文件上传

以下学习 朔宁夫 开发课&#xff08;Python&#xff09;。 文件上传&表单类 一 Django文件上传 表单上传。 前端&#xff1a;表单设置 enctype "multipart/form-data" 后端&#xff1a;获取上传文件对象 upload_dile request.FILES.get("文件域名…

《数据结构、算法与应用C++语言描述》-红黑树的C++实现-百万级数据量测试通过

红黑树 完整可编译运行代码见仓库&#xff1a;GitHub - Jasmine-up/Data-Structures-Algorithms-and-Applications/_35Red black tree。 如有问题请在评论区指出。另外&#xff0c;Github仓库会根据我的学习情况持续更新&#xff0c;欢迎大家点star&#xff0c;谢谢。 基本概…

【LeetCode】151. 反转字符串中的单词(中等)——代码随想录算法训练营Day08

题目链接&#xff1a;151. 反转字符串中的单词 题目描述 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 …

【卡码网】55. 右旋转字符串——代码随想录算法训练营Day08

题目链接&#xff1a;55. 右旋转字符串 题目描述 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k&#xff0c;请编写一个函数&#xff0c;将字符串中的后面 k 个字符移到字符串的前面&#xff0c;实现字符串的右旋转操作…

YOLOv8改进 | 主干篇 | 低照度增强网络PE-YOLO改进主干(改进暗光条件下的物体检测模型)

一、本文介绍 本文给大家带来的改进机制是低照度图像增强网络PE-YOLO中的PENet,PENet通过拉普拉斯金字塔将图像分解成多个分辨率的组件,增强图像细节和低频信息。它包括一个细节处理模块(DPM),用于通过上下文分支和边缘分支增强图像细节,以及一个低频增强滤波器(LEF),…

力扣909. 蛇梯棋

广度优先搜索 动态规划 思路&#xff1a; 定义 pair {id, step} 为到达格子编号 id&#xff0c;使用的步数 step&#xff0c;记作 step[id]&#xff1b;记录下所摇骰子 1 - 6 到达的格子编号 next&#xff0c;step[next] step[id] 1&#xff1a; 走了 1 步&#xff0c;所能…

指纹浏览器为什么要搭配代理IP?如何选择?

跨境电商无论是店群模式还是社媒矩阵运营&#xff0c;都必须涉及管理多个社媒/电商帐户的动作&#xff0c;但这很容易引发网站怀疑并最终被批量封号。使用指纹浏览器浏览器的主要目的是通过创建新的浏览器指纹来隐藏用户的真实浏览器指纹。 但浏览器指纹并不是网站关注的唯一…

ELK之Filebeat安装配置及日志抓取

一、Filebeat是什么 轻量型日志采集器 无论您是从安全设备、云、容器、主机还是 OT 进行数据收集,Filebeat 都将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。 Filebeat 随附可观测性和安全数据源模块,这些模块简化了常见格式的日志的收集、解…

边缘计算发展的瓶颈

上次我们讨论了边缘计算&#xff0c;并用无人零售和边缘计算的例子&#xff0c;说明了边缘计算的便利性。 但是边缘计算&#xff0c;也有很多限制。 硬件资源限制 边缘设备通常具有有限的计算、存储和网络资源。这种资源限制使得在处理大量数据或执行复杂任务时&#xff0c;…

Qt/QML编程之路:Grid、GridLayout、GridView、Repeater(33)

GRID网格用处非常大,不仅在excel中,在GUI中,也是非常重要的一种控件。 Grid 网格是一种以网格形式定位其子项的类型。网格创建一个足够大的单元格网格,以容纳其所有子项,并将这些项从左到右、从上到下放置在单元格中。每个项目都位于其单元格的左上角,位置为(0,0)。…

Nsis常量的使用

常量定义 !define 常量名 常量值 使用 ${常量名} 作用 常量可与字符串拼接使用 实例 !define EXENAME "Test" OutFile "${EXENAME}.exe" #常量与字符串拼接使用 Section SectionEnd

What is `DOM注入攻击` does?

DOM&#xff08;Document Object Model&#xff09;注入攻击&#xff0c;也称为DOM型跨站脚本&#xff08;DOM-based XSS, 或简称DXSS&#xff09;&#xff0c;是一种特殊的跨站脚本攻击方式。不同于传统的存储型XSS或反射型XSS&#xff0c;DOM注入攻击的关键在于客户端JavaScr…

电脑DIY-显卡

显卡 显卡代号前缀英伟达&#xff08;NVIDIA&#xff09;RTX系列实时光线追踪的基本原理DLSS技术的基本原理 显卡代号前缀 前缀品牌首次发布时间定位适用人群主流产品GTNVIDIA2006年较低性能办公用户、轻度游戏GT 1030GTXNVIDIA2008年高性能游戏玩家、图形设计师GTX 1080 TiRT…

qt 扫码枪扫描 输入事件 包含可输入字符

原因说明 当需要对扫码枪扫描出的信息进行处理或打印等&#xff0c;有多个办法&#xff0c;其中串口&#xff0c;中间件等不在本文章讨论内。如果在网上搜索相对于解决办法&#xff0c;发现有大多数都是对输入事件进行处理&#xff0c;但在没有找到好的处理之后&#xff0c;作…

【Docker】Dockerfile构建最小镜像

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 前言 一.Dockerfile是什么 二.Dock…