c语言 线性搜索算法

        线性搜索被定义为一种顺序搜索算法,从一端开始,遍历列表中的每个元素,直到找到所需的元素,否则搜索将继续,直到数据集的末尾。 

线性搜索算法 

线性搜索算法如何工作?
在线性搜索算法中:
        1、每个元素都被视为该键的潜在匹配项并进行相同检查。
        2、如果找到任何元素等于该键,则搜索成功并返回该元素的索引。
        3、如果没有找到与键相等的元素,则搜索结果为“未找到匹配项”。
例如:考虑数组arr[] = {10, 50, 30, 70, 80, 20, 90, 40}且key = 30
步骤1:从第一个元素(索引0)开始,将key与每个元素(arr[i])进行比较。

        将 key 与第一个元素 arr[0] 进行比较。由于不相等,迭代器将移动到下一个元素作为潜在的匹配项。

将 key 与 arr[0] 进行比较 

将 key 与下一个元素 arr[1] 进行比较。由于不相等,迭代器将移动到下一个元素作为潜在的匹配项。 

将 key 与 arr[1] 进行比较 

步骤2:现在,当将arr[2]与key进行比较时,值匹配。因此,线性搜索算法将产生一条成功消息,并在找到 key 时返回元素的索引(此处为 2)。 

将 key 与 arr[2] 进行比较

线性搜索算法的实现:
下面是线性搜索算法的实现: 

 // C code to linearly search x in arr[].
 
#include <stdio.h>
 
int search(int arr[], int N, int x)
{
    for (int i = 0; i < N; i++)
        if (arr[i] == x)
            return i;
    return -1;
}
 
// Driver code
int main(void)
{
    int arr[] = { 2, 3, 4, 10, 40 };
    int x = 10;
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Function call
    int result = search(arr, N, x);
    (result == -1)
        ? printf("Element is not present in array")
        : printf("Element is present at index %d", result);
    return 0;
}

输出
元素出现在索引 3 处

线性搜索的复杂度分析:
时间复杂度:
最佳情况:在最好的情况下,键可能出现在第一个索引处。所以最好的情况复杂度是 O(1)
最坏的情况:在最坏的情况下,键可能出现在最后一个索引处,即与列表中开始搜索的末尾相反的位置。因此,最坏情况的复杂度是 O(N),其中 N 是列表的大小。
平均情况: O(N)
辅助空间: O(1),因为除了迭代列表的变量之外,没有使用其他变量。 

线性搜索的优点:
        1、无论数组是否已排序,都可以使用线性搜索。它可以用于任何数据类型的数组。
        2、不需要任何额外的内存。
        3、它是一种非常适合小型数据集的算法。

线性搜索的缺点:
        线性搜索的时间复杂度为 O(N),这反过来又使得大型数据集的搜索速度变慢。
不适合大型阵列。

什么时候使用线性搜索?
        1、当我们处理小数据集时。
        2、当您搜索存储在连续内存中的数据集时。  

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

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

相关文章

Linux VM虚拟环境 设置静态IP

目录 查看自己的网卡配置说明重启网卡实例测试配置情况测试网络 查看自己的网卡 ip a配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens32配置说明 [rootlinux-server ~]# cd /etc/sysconfig/network-scripts/ #网卡配置文件存放路径 [rootlinux-server network-scri…

凡得首席战略官蔡聪,将出席“ISIG-流程挖掘技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;RPA中国、AIGC开放社区、LowCode低码时代&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索R…

java后端常见问题

java面向对象的特征&#xff0c;如何应用 面向对象编程是利用类和对象的编程思想万物皆成类&#xff0c;对象是类的具体体现&#xff0c;面向对象的三大基础特性&#xff0c;继承封装多态。、封装&#xff1a;封装隐藏了类的具体内部实现机制&#xff0c;可以在不影响使用的情…

开源导出html表格项目-easyHtml

开源导出html表格项目-easyHtml 背景介绍 背景 项目的由来&#xff0c;在面试的过程中&#xff0c;发现这个需求&#xff08;导出html表格&#xff09;比较常见&#xff0c;同时也引起我的兴趣&#xff0c;所以就有了开源项目easyHtml第一个版本 介绍 功能 支持自定义表格标…

【JavaScript 漫游】【035】同源限制

文章简介 本篇文章为【JavaScript 漫游】专栏的第 035 篇文章&#xff0c;记录了浏览器模型同源限制相关的知识点。 概述 浏览器安全的基石是“同源政策”&#xff08;same-origin policy&#xff09;。1995 年&#xff0c;该政策由 Netscape 公司引入浏览器。目前&#xff…

云服务器与传统服务器价格对比

在信息化时代&#xff0c;服务器作为企业数据存储和计算的核心设备&#xff0c;扮演着举足轻重的角色。传统的物理服务器与近年来兴起的云服务器在功能、性能、安全性等方面各有千秋&#xff0c;而价格则是企业在选择时不得不考虑的重要因素。本文将简要科普云服务器与传统服务…

解释 JavaScript 中 this 的值?

大部分 JavaScript 学习者在学习this 概念时通常觉得一头雾水,许多人觉得是 JavaScript 中最复杂的概念之一,然而this 值是 JavaScript 面试经典题,搞懂 this 值也是战胜面试的第一步。本篇文章会整理出来 this 值的 5 种判断方式,让读者在面试时能轻易掌握这些概念。 在 …

[答疑]AI能做“需求分析”吗+警惕造词圈子割韭菜

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第五元素 2024-3-10 21:02 潘老师&#xff0c;AI热度不减&#xff0c;现在sora出来更是火爆。有些在github上有几万star的程序员&#xff0c;宣称能用AI做“需求分析”&#xff0c;好…

Java字符串处理详解:从入门到精通

Java字符串处理详解&#xff1a;从入门到精通 文章目录 Java字符串处理详解&#xff1a;从入门到精通前言一、创建和初始化字符串二、字符串的基本操作1.连接字符串2.获取字符串长度3.获取指定位置的字符4. 比较字符串5. 查找子串6. 截取子串7. 替换字符串8. 转换大小写9. 去除…

TCP/IP协议栈

TCP/IP协议栈&#xff08;Transmission Control Protocol/Internet Protocol Suite&#xff09;是互联网上进行数据通信的一系列网络协议的集合&#xff0c;它是现代计算机网络通信的基础架构。 它由多个不同的协议层构成&#xff0c;每层负责不同层面的数据处理和传输工作&…

京津冀协同发展:北京·光子1号金融算力中心——智能科技新高地

京津冀协同发展是党中央在新的历史条件下提出的一项重大国家战略&#xff0c;对于全面推进“五位一体”总体布局&#xff0c;以中国式现代化全面推进强国建设、民族复兴伟业&#xff0c;具有重大现实意义和深远历史意义。随着京津冀协同发展战略的深入推进&#xff0c;区域一体…

linux内核原理--进程,线程

1.进程与线程 linux中调度与执行代码流的基础单位是线程&#xff0e; 我们通过父进程产生新的子进程&#xff0c;其实是产生一个新的线程&#xff0e;不过这个线程属于一个新的线程组&#xff0c;且是线程组的组长&#xff0e; 我们通过兄弟线程p产生新的线程q&#xff0e;也是…

SpringBoot总结-配置管理和日志管理

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载 整合配置文件 1.在springboot整合配置文件&#xff0c;分成两大类&#xff1a; application.properties application.yml 或者是 Boots…

模板模式-C#实现

在模板模式&#xff08;Template Pattern&#xff09;中&#xff0c;一个抽象类公开定义了执行它的方法的方式/模板。 意图&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。 主要解决&#xff1a;一些方法通用&#xff0c;却在每一个子类都重新…

javaEE13(网站第8章两个课后题)

1、对“jspservletjavabean实现分页查询”功能做如下补充&#xff1a; &#xff08;1&#xff09;记录批量删除&#xff1a;每个记录前添加复选框&#xff0c;点击批量删除&#xff0c;删除选中记录。 增加跳转到任意页功能。用户可改变每页记录条数。 页面&am…

JAVA学习-IO.ZIP压缩输入输出流

ZIP压缩输入输出流是Java中用于处理ZIP格式文件的API&#xff0c;它们提供了对ZIP文件进行压缩和解压缩操作的功能。 一、Java中常用的ZIP压缩输入输出流有以下几种&#xff1a; 1. ZipOutputStream&#xff1a; 这是用于将数据写入ZIP文件的输出流&#xff0c;可以将多个文件…

phpqrcode生成二维码

public function getImg(){ $uid1000; //自定义用户id require_once /sdk/phpqrcode/phpqrcode.php; //注意替换sdk路径 $object new \QRcode(); $value \App\get_upload_path(/appapi/Agent/share?code.$code); $errorCorrectionLevel L;//容错级别 $mat…

[vscode]使用cmake时将命令行参数传递给调试目标

一、简介 本文介绍了在vscode中使用cmake工具时&#xff0c;如何传递参数给编译目标的方法。 前提&#xff1a;使用vscodecmake编译C/C程序。 二、方法 在.vscode/目录下新建settings.json文件&#xff0c;并将待传底的参数写在 cmake.debugConfig里。 下面介绍了一个示例&a…

基于单片机+物联网控制的校园空气净化计划系统设计

摘要: 近年来,包含现代物联网技术概念的新型空气质量净化器技术原型在国内市场上已经具有一定雏形,主要还是存在以下几个不足:室内空气中的流动量和速度基本是固定的,不管室内空气系统中的任何污染物和室内空气质量如何,空气质量净化器按照所设定的作业负荷进行运转,这种…

selenium元素定位问题

一、按钮点击 具体网页信息如下&#xff1a; 定位的时候driver.find_element(By.CLASS_NAME, 方法搞不定。 定位方法&#xff1a; 方法一&#xff1a;通过文本定位 driver.find_element(By.XPATH, "//*[text()高分一号]").click() time.sleep(3) 如果是部分文字…