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 是数据集的大小。对于大规模数据集,性能相对较差。

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

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

四 现实中的应用

应用场景如下:

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

steam搬砖项目风险在哪里?这几点一定要记牢

你可能已经听说过Steam搬砖项目&#xff0c;这是一个通过在Steam平台充值美元&#xff0c;购买道具&#xff0c;然后将这些道具转移到BUFF平台进行交易&#xff0c;从而获取利润的方式。这个项目的操作方法主要是利用一些渠道和经验技巧&#xff0c;购买低价道具&#xff0c;然…

力扣每日一练(24-1-17):轮转数组

方法一&#xff1a;使用额外的数组 这个方法的思路是创建一个新的数组&#xff0c;然后将每个元素放到正确的位置上。新数组的第i个元素应该是原数组的第(i len(nums) - k) % len(nums)个元素。 def rotate(nums, k):n len(nums)rotated [0] * nfor i in range(n):rotated[(…

用Axure RP 9制作元件教程

制作 软件&#xff1a;Axure RP 9 图标&#xff1a;iconfont 制作流程 1.打开Axure RP 9 2.iconfont 搜索眼睛 图标 图标找好之后 我们可以开始了 3.制作 我们用文本框 如图片 第2步 我们选中这2个把他们变成动态面板 在动态面板增加一个状态 如图片 我们接下来…

locust快速入门--使用分布式提高测试压力

背景&#xff1a; 使用默认的locust启动命令进行压测时&#xff0c;尽管已经将用户数设置大比较大&#xff08;400&#xff09;&#xff0c;但是压测的时候RPS一直在100左右。需要增加压测的压力。 问题原因&#xff1a; 如果你是通过命令行启动的或者参考之前文章的启动方式…

Python - 深夜数据结构与算法之 DP 串讲

目录 一.引言 二.DP 知识点回顾 1.递归 2.分治 3.动态规划 三.DP 经典题目回顾 1.Climb-Stairs [70] 2.Unique-Paths [62] 3.House-Robber [198] 4.Min-Path-Sum [64] 5.Best-Time-Sell-Stock [121] 6.Min-Cost-Climb [746] 7.Edit-Distance [72] 8.Longest-Sub-…

AI大模型预先学习笔记一:transformer和fine tune技术介绍

一、商业观点&#xff1a;企业借助大模型获得业务增长可能 二、底层原理&#xff1a;transformer 1&#xff09;备注 ①下面每个步骤都是自回归的过程&#xff08;aotu-regressive&#xff09;&#xff1a;已输出内容的每个字作为输入&#xff0c;一起生成下一个字 ②合起来就…

决战排序之巅(二)

决战排序之巅&#xff08;二&#xff09; 排序测试函数 void verify(int* arr, int n) 归并排序递归方案代码可行性测试 非递归方案代码可行性测试 特点分析 计数排序代码实现代码可行性测试 特点分析 归并排序 VS 计数排序&#xff08;Release版本&#xff09;说明1w rand( ) …

23/76-LeNet

LeNet 早期成功的神经网络。 先使用卷积层来学习图片空间信息。 然后使用全连接层转换到类别空间。 #In[]LeNet,上世纪80年代的产物,最初为了手写识别设计from d2l import torch as d2l import torch from torch import nn from torch.nn.modules.loss import CrossEntropyLos…

Transformer详解(附代码实现及翻译任务实现)

一&#xff1a;了解背景和动机 阅读Transformer论文&#xff1a; 阅读原始的Transformer论文&#xff1a;“Attention is All You Need”&#xff0c;由Vaswani等人于2017年提出&#xff0c;是Transformer模型的开创性工作。 二&#xff1a;理解基本构建块 注意力机制&#…

C++面试宝典第21题:字符串解码

题目 给定一个经过编码的字符串,返回其解码后的字符串。具体的编码规则为:k[encoded_string],表示方括号内部的encoded_string正好重复k次。注意:k保证为正整数;encoded_string只包含大小写字母,不包含空格和数字;方括号确定是匹配的,且可以嵌套。 示例: 编码字符串为…

tcpdump常用参数以及wireshark密文解密

tcpdump常用参数以及wireshark密文解密 文章目录 一、tcpdump命令和常用参数二、在wireshark中协议解析 tcpdump常用参数 一、tcpdump命令和常用参数 tcpdump常用命令&#xff1a;tcpdump -i eth0 src host 11.6.224.1 and udp port 161 -s 0 -w 161.pcap &#xff08;161为sn…

开发知识点-JAVA-springboot

springboot springbootConfiguration注解的底层核心原理Bean注解的底层核心原理 springboot Configuration注解的底层核心原理 https://www.bilibili.com/video/BV1rq4y1E7gK/?spm_id_from333.999.0.0&vd_sourcef21773b7086456ae21a58a6cc59023be spring.io 全家桶 24…

Mysql 数据库DDL 数据定义语言——数据库,数据表的创建

DDL&#xff1a;数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09;—Database Definition Language 1、登录数据库&#xff0c;输入用户名和密码 mysql -ufdd -p990107Wjl2、查看数据库 show databases;3、创建一个…

主流人工智能AI工具测评

主流人工智能AI工具测评 主流的人工智能AI工具ChatGPT ——OpenAI研发CHAT_BISON——Google研发Qwen通义千问 ——阿里云研发文心一言——百度研发 根据10个问题分析人工智能的回答女朋友生气了怎么哄千元机性价比推荐小米13 和 vivo iQOO 11s哪个好计算机专业毕业论文护士年终…

node.js(expree.js )模拟手机验证码功能及登录功能

dbconfig.js const mysql require(mysql) module.exports {// 数据库配置config: {host: localhost, // 连接地址port: 3306, //端口号user: root, //用户名password: wei630229, //密码database: exapp2, //数据库名}, // 连接数据库&#xff0c;使用mysql的连接池连接方式…

transfomer的位置编码

什么是位置编码 在transformer的encoder和decoder的输入层中&#xff0c;使用了Positional Encoding&#xff0c;使得最终的输入满足&#xff1a; input_embeddingpositional_encoding 这里&#xff0c;input_embedding的shape为[n,b,embed_dim],positional_encoding和input_…

xilinxi mulitboot 启动

xilinix在线更新有两种方式&#xff0c;一种是使用ICAP原语&#xff0c;另一中是在xdc中约束&#xff0c;根据应用的场景不同&#xff0c;选用不同的启动方式&#xff0c;第二种更为简单。 可参考官方提供的手册和实例 XAPP1247 链接&#xff1a; XAPP1247 golden和updata.b…

VitePress-01-从零开始的项目创建(npm版)

说明 本文介绍一下 VitePress的项目创建的步骤。 主要用到的命令工具是 npm。 本文的操作步骤是从无到有的创建一个完整的基本的【VitePress】项目。 环境准备 根据官方文档的介绍&#xff0c;截止本文发稿时&#xff0c;需要使用node.js 18 的版本。 可以使用node -v 的命令查…

muduo网络库剖析——通道Channel类

muduo网络库剖析——通道Channel类 前情从muduo到my_muduo 概要事件种类channel 框架与细节成员函数细节实现使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多情况是否可以高效满足&#xff1b;而作为学习者&#x…

Asp .Net Core 系列:集成 Ocelot+Consul实现网关、服务注册、服务发现

什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的微…