首页 > 编程语言 >c语言 线性搜索算法

c语言 线性搜索算法

时间:2024-03-14 11:32:36浏览次数:26  
标签:arr 语言 int 搜索算法 搜索 key 线性

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

线性搜索算法 

线性搜索算法如何工作?
在线性搜索算法中:
        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、当您搜索存储在连续内存中的数据集时。  

标签:arr,语言,int,搜索算法,搜索,key,线性
From: https://blog.csdn.net/hefeng_aspnet/article/details/136616399

相关文章

  • java 线性搜索算法
            线性搜索被定义为一种顺序搜索算法,从一端开始,遍历列表中的每个元素,直到找到所需的元素,否则搜索将继续,直到数据集的末尾。 线性搜索算法 线性搜索算法如何工作?在线性搜索算法中:        1、每个元素都被视为该键的潜在匹配项并进行相同检查。 ......
  • C语言项目--**客户信息管理系统
    C语言项目–客户信息管理系统实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。1.1需求说明1.1.1主菜单进入系统,展示主菜单,输入各功能对应的数字编号选择要进行的操作,如下图:1.1.2添加客户输入1,进入“添加客户”界面,需要填写姓名、性......
  • R语言风险价值:ARIMA,GARCH模型,Delta-normal法滚动估计,预测VaR(Value at Risk)和回测分析
    原文链接:http://tecdat.cn/?p=24492原文出处:拓端数据部落公众号介绍此分析的目的是帮助客户构建一个过程,以在给定时变波动性的情况下正确估计风险价值。风险价值被广泛用于衡量金融机构的市场风险。我们的时间序列数据包括1258天的股票收益。为了解释每日收益率方差的一小部......
  • 实验1 C语言输入输出和简单程序编写
    #include<stdio.h>intmain(){printf("o\n");printf("<H>\n");printf("II\n");printf("o\n");printf("<H>\n");printf("II\n");return0;......
  • R语言聚类分析、因子分析、主成分分析PCA农村农业相关经济指标数据可视化
    全文链接:https://tecdat.cn/?p=35360原文出处:拓端数据部落公众号随着农业和农村经济的快速发展,各地区之间的经济差异日益显著。为了更好地理解这种差异,并为政策制定提供科学依据,本研究帮助客户采用了聚类分析和因子分析、主成分分析3种无监督学习方法,对多个省份的农业、林业、牧......
  • R语言使用灰色关联分析(Grey Relation Analysis,GRA)中国经济社会发展指标
    原文链接:http://tecdat.cn/?p=16881原文出处:拓端数据部落公众号 灰色关联分析包括两个重要功能。第一项功能:灰色关联度,与correlation系数相似,如果要评估某些单位,在使用此功能之前转置数据。第二个功能:灰色聚类,如层次聚类。 灰色关联度灰色关联度有两种用法。该算法用于测量......
  • C语言学习
    导言C语言是一门编译型语言,是目前在国际上十分通用的语言,有它的国际标准比如C89,C90,C99,C11截至目前使用最多的是C89,C90;第一个C语言程序1.怎么写?a.创建一个项目b.创建一个源文件c.写代码d.编译代码【注(a,b)方法已在发表的第一篇文章中提到,不了解的可以去浏览】c.想写......
  • FPGA交通信号灯设计报告(VHDL语言)
    FPGA的大作业我选择了交通灯控制系统的设计,此课程只有2个学分,因此只需要在相应软件仿真出结果即可。以下是我的设计报告,当时写的匆忙,没有对代码进行优化改进,但仿真结果是正确的,可以给大家提供一下思路。一、任务分析1.输入和输出2.多进程3.特殊情况4.注意二、quartus......
  • 【预训练语言模型】使用Transformers库进行GPT2预训练
    基于HuggingFace的Transformer库,在Colab或Kaggle进行预训练。本教程提供:英文数据集wikitext-2和代码数据集的预训练。注:可以自行上传数据集进行训练目的:跑通自回归语言模型的预训练流程一、准备1.1安装依赖!pipinstall-Udatasets!pipinstallaccelerate-U注意:在C......
  • 【预训练语言模型】 使用Transformers库进行BERT预训练
    基于HuggingFace的Transformer库,在Colab或Kaggle进行预训练。鉴于算力限制,选用了较小的英文数据集wikitext-2目的:跑通Mask语言模型的预训练流程一、准备1.1安装依赖!pip3install--upgradepip!pipinstall-Udatasets!pipinstallaccelerate-U注意:在Kaggle上训练......