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.时间复杂度:
在最坏的情况下,顺序查找需要遍历整个数组才能确定目标元素是否存在。因此,最坏情况下的时间复杂度是,其中n是数组的长度。
最好情况发生在目标元素在数组的第一个位置,此时算法只需要一次比较就找到了目标元素。因此,顺序查找算法的最好时间复杂度为 。
在平均情况下,假设目标元素在数组中的位置是等概率的,则平均查找次数为 。因此,平均情况下的时间复杂度也是
。
B.空间复杂度:
顺序查找算法是原地算法,它不需要额外的空间来存储中间结果,只需要少量的额外空间用于存储变量和参数。因此,空间复杂度是O(1)。
三 优点和缺点
A.优点:
简单直观: 顺序查找是一种直观且易于理解的查找算法,无需复杂的数据结构或算法设计。
适用于小规模数据: 在小规模数据集中,顺序查找的性能相对较好,因为它的常数因子较小,不会引入过多的开销。
适用于无序数据: 顺序查找不依赖于数据的有序性,适用于无序的数据集。
B.缺点:
时间复杂度高: 在最坏情况下,顺序查找需要遍历整个数据集,因此其最坏时间复杂度是O(n),其中 n 是数据集的大小。对于大规模数据集,性能相对较差。
不适用于有序数据: 如果数据集是有序的,其他更高效的查找算法,如二分查找,通常会更加适用。顺序查找在这种情况下的性能不如一些针对有序数据设计的算法。
性能对数据分布敏感: 顺序查找的性能受到数据分布的影响。如果目标元素在数据集的前部分,性能相对较好;如果目标元素在后部分,性能较差。
四 现实中的应用
应用场景如下:
小规模数据集: 当数据集规模较小,且没有明显的顺序结构时,顺序查找可能是一种简单而直观的选择。由于顺序查找的时间复杂度是线性的,对于小规模数据,性能影响相对较小。
无序数据集: 如果数据集是无序的,而且没有其他信息可以利用,顺序查找是一种合理的选择。在这种情况下,其他更复杂的算法可能不会带来太大的优势,因为它们的性能可能会受到数据分布的影响。
调试和验证: 顺序查找可以用于验证其他更高级查找算法的正确性。在实现更复杂的算法之前,可以使用顺序查找验证预期的结果。
相关文章:
C语言经典算法之顺序查找算法
目录 前言 A.建议 B.简介 一 代码实现 二 算法时空复杂度 A.时间复杂度: B.空间复杂度: 三 优点和缺点 A.优点: B.缺点: 四 现实中的应用 前言 A.建议 1.学习算法最重要的是理解算法的每一步,而不是记住算…...
c语言嵌套循环
c语言嵌套循环 c语言嵌套循环 c语言嵌套循环一、c语言嵌套循环格式二、嵌套循环案例九九惩罚口诀 一、c语言嵌套循环格式 for(初始值;表达式;表达式) {for(初始值;表达式;表达式){代码} }int main() {for (…...
磁盘位置不可用怎么修复?
磁盘位置不可用是计算机使用中经常遇到的问题。造成磁盘位置不可用的原因有多种,其中最常见的是磁盘文件系统损坏。当文件系统损坏时,操作系统无法正常访问磁盘上的数据,导致磁盘位置不可用。 磁盘位置不可用怎么修复? 当磁盘位置…...
【总结】Linux命令中文帮助手册
1. 为什么要总结Linux命令中文帮助手册 Linux 官方并不提供中文的 help、man 帮助手册。网络上已有的前人翻译过的中文手册版本比较老,且翻译存在误差。从记忆角度来看,Linux 很多命令都不一定记得住详细的用法,易遗忘,缺少经验总…...
[贪心算法] 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大…...
meter报OOM错误,如何解决?
根据在之前的压测过程碰到的问题,今天稍微总结总结,以后方便自己查找。 一、单台Mac进行压测时候,压测客户端Jmeter启动超过2000个线程,Jmeter报OOM错误,如何解决? 解答:单台Mac配置内存为8G&…...
第二百六十九回
文章目录 概念介绍设置方法示例代码内容总结 我们在上一章回中介绍了Card Widget相关的内容,本章回中将介绍国际化设置.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的国际化设置是指在App设置相关操作,这样可以让不同国家的…...
未来能源转型之路:2023年第十三届中国国际储能大会启示录
在2023年第十三届中国国际储能大会上,全球各地的能源专家、学者和企业代表齐聚一堂,共同探讨了储能技术在推动能源转型中的重要作用。对于我们普通人来说,从这场大会中可以学到什么呢? 一、储能技术是未来能源发展的关键 随着可再…...
rviz可视化机械臂(python)
一、准备的东西 一个机械臂的urdf 规划的路径点 二、launch文件的撰写 1.初始化 <?xml version"1.0" encoding"utf-8"?> <launch><param name"robot_description" textfile"机械臂.urdf" /><node name&qu…...
《设计模式的艺术》笔记 - 享元模式
介绍 享元模式运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式ÿ…...
ubuntu系统(10):使用samba共享linux主机中文件
目录 一、samba安装步骤 1、Linux主机端操作 (1)安装sabma (2)修改samba配置文件 (3)为user_name用户设置samba访问的密码 (4)重启samba服务 2、Windows端 二、使用 1、代码…...
数据集成时表模型同步方法解析
01 背景介绍 数据治理的第一步,也是数据中台的一个基础功能 — 即将来自各类业务数据源的数据,同步集成至中台 ODS 层。业务数据源多种多样,单单可能涉及到的主流关系型数据库就有近十种。功能更加全面的数据中台通常还具有对接非关系型数据…...
彻底解决charles抓包https乱码的问题
最近做js逆向,听说charles比浏览器抓包更好用,结果发现全是乱码,根本没法用。 然后查询网上水文:全部都是装证书,根本没用! 最后终于找到解决办法,在这里记录一下: 乱码的根本原因…...
Towards Robust Blind Face Restoration with Codebook Lookup Transformer
Towards Real World Blind Face Restoration with Generative Facial Prior 这个projec相对codeformer已经是老一些的了,CodeFormer paper说自己的效果比这个更好。 有看了这个视频,它借用了R-ESRGAN 4x 和 GFPGAN 50%,既保留了一些人物特征…...
flutter3使用dio库发送FormData数据格式时候的坑,和get库冲突解决办法
问题描述 问题1:当你使用FormData.from(Flutter3直接不能用)的时候,可能会提示没有这个方法,或者使用FormData.fromMap(flutter3的dio支持)的时候也提示没有,这时候可能就是和get库里面的Formdata冲突了 问题1:The me…...
matlab读取pwm波数据,不用timer的方法,这里可以参考。Matlab/Simulink之STM32开发-编码器测速
这里提供了一个不用timer的方法,可以参考: https://blog.csdn.net/weixin_36967309/article/details/88699830 Matlab/Simulink之STM32开发-编码器测速...
使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第十九章到第二十一章
十九、碰撞检测 原文:inventwithpython.com/invent4thed/chapter19.html 译者:飞龙 协议:CC BY-NC-SA 4.0 碰撞检测涉及确定屏幕上的两个物体何时相互接触(即发生碰撞)。碰撞检测对于游戏非常有用。例如,如…...
Multimodal Multitask Learning with a Unified Transformer
SNLI-VE dataset,natural language understanding tasks:MNLI,QNLI,QQP,SST-2 截止到发文时间的issue数,多吓人呐,不建议复现...
c指针和字符数组初学者比较好的例子
本练习的主题:一个对象的指针可以修改这个对象的内容; 注:对象是指一个固定大小的内存块。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> int getMem(char **p1,int *m…...
微信原生小程序上传与识别以及监听多个checkbox事件打开pdf
1.点击上传并识别 组件样式<van-field border"{{ false }}" placeholder"请输入银行卡卡号" model:value"{{bankNo}}" label"卡号"><van-icon bindtap"handleChooseImg" slot"right-icon" name"sca…...
基于 RPA 自动化技术的私域机器人助手构建指南
利用自动化工作流实现私域运营中的消息智能响应与多任务协同 能力介绍 在私域流量运营中,如何高效响应用户需求、精细化管理社群是提升转化率的关键。传统的人工客服模式往往面临响应不及时、重复性劳动繁重等问题。 本方案基于 RPA(机器人流程自动化…...
UV-UI终极指南:如何在30分钟内构建跨平台应用
UV-UI终极指南:如何在30分钟内构建跨平台应用 【免费下载链接】uv-ui uv-ui 破釜沉舟之兼容vue32、app、h5、小程序等多端基于uni-app和uView2.x的生态框架,支持单独导入,开箱即用,利剑出击。 项目地址: https://gitcode.com/gh…...
OpenHarmony富设备开发实战:基于DAYU200的硬件选型、系统烧录与AI应用开发
1. DAYU200:OpenHarmony富设备开发的“敲门砖”与“试验田”如果你是一名对OpenHarmony感兴趣,尤其是想涉足标准系统(也就是我们常说的富设备)开发的工程师或爱好者,那么“开发板选型”大概率是你遇到的第一个难题。几…...
AI智能体开发(一):从概念到架构设计
定义与核心特征 AI智能体(AI Agent)是一种能够自主感知环境、做出决策并执行行动的AI系统。 与传统AI模型不同,Agent不仅仅是被动地"回答问题",而是能够主动地"完成任务"。它像一个智能助手,能够理解你的目标,规划执行步骤,调用各种工具,最终交付…...
如何实现百度网盘效率革命?BaiduPanFilesTransfers智能管理工具深度解析
如何实现百度网盘效率革命?BaiduPanFilesTransfers智能管理工具深度解析 【免费下载链接】BaiduPanFilesTransfers 百度网盘批量转存、分享和检测工具 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduPanFilesTransfers 还在为海量网盘资源的手动整理而消…...
终极魔兽争霸3兼容性修复指南:5分钟让经典游戏在现代电脑上重生
终极魔兽争霸3兼容性修复指南:5分钟让经典游戏在现代电脑上重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代Win…...
《Windows Sysinternals实战指南》PsTools 学习笔记(7.10):PsFile——远程“谁在占用这个文件/共享”的取证与解占用
🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...
java中的进程的详细解析
JavaEE 初阶(进程) 一、操作系统 操作系统是计算机中的一个重要软件。 操作系统是一个搞管理的软件: 管理各种硬件设备给各种应用程序提供一个稳定的运行环境, 这些应用程序在运行中,即使有一个应用程序发生bug崩溃了&…...
Modon与Montage Hotels Resorts合作在埃及拉斯伊尔赫克马引入超豪华酒店品牌
Montage Ras El Hekma(拉斯伊尔赫克马蒙太奇酒店)将在该地中海景区推出首批对外开放销售的品牌住宅,也是该地区的首个Montage(蒙太奇)度假村 总部位于阿布扎比的Modon Holding与Montage Hotels & Resorts…...
美团/京东/淘宝闪购外卖红包天天领取口令推荐最新发布今日实测有效的外卖红包每天免费领取入口
今日实测有效可领取外卖红包口令是:淘宝APP在闪购外卖下搜索外卖红包领取口令【 188288 】、美团APP搜索外卖红包领取口令是【 188288 】、词令直达美团/京东/淘宝闪购外卖红包领取口令是【 188288 】。作为天天点外卖的上班族,每天下单前先通过推荐的外…...
