【算法基础】顺序查找解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 查找是指在指定数据组合中找出满足条件的元素个体,顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。
作者:[柒号华仔]
个人信条:星光不问赶路人,岁月不负有心人。
个人方向:主要方向为5G,同时兼顾其他网络协议,编解码协议,C/C++,linux,云原生等,感兴趣的小伙伴可以关注我,一起交流。


1. 顺序查找介绍

1.1 定义

查找是指在指定数据组合中找出满足条件的元素个体。顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。
顺序查找是最基础也是最简单的查找算法,在需要进行查找时,这是我们的首选方法,只有数据较多,结构复杂,耗时较多需要优化时,我们才会考虑使用其他查找方法。

1.2 基本原理

对于任意一个序列以及一个给定的元素,从第一个序列元素开始,将给定元素与序列中元素依次比较,若某个元素与给定元素相同,则查找成功,否则,若将序列中的元素与给定元素全部比较完,依然无法匹配相同,则查找失败。
比如,拿着一张照片从一个班上找出对应学生,那么长相就是判定值,我们需要一个个学生依次去比对,长相一致则找出了该学生,如果全班都看了一遍,还是没找到,则寻人失败。

1.3 时间复杂度与空间复杂度

顺序查找平均查找长度为 (n + 1) / 2,时间复杂度为 O(n) 。
顺序查找是对数列顺序的比较,没有额外的空间,所以空间复杂度为常数 O(1)。

1.4 优缺点

优点:算法简单,对表中元素排列次序无要求,且对关键字的次序无要求,插入和删除元素都非常方便。
缺点:时间复杂度较大,当数据规模较大时,效率较低。


2. 代码实现

2.1 代码设计

在这里插入图片描述
a. 输入需要查找的元素key;
b. 从数组首元素(i=0)开始查找,如果array[i] = key,则查找成功返回i;
c. 否则i加1,继续查找,如果找到数组末尾,依然没找到,则查找失败,返回-1。

2.2 代码实现

#include<stdio.h>
#include<string.h>

int search(int array[],int n,int key)
{
    int i;

    for(i = 0; i<n; i++){
        if(array[i] == key)
            return i;   //查找成功
    }
    return -1;          //查找失败
}

int main(void)
{
    int arr[7] = {62,8,35,22,90,58,6};
    int key,ret;

    printf("请输入需要查找的数字:");
    scanf("%d",&key);
    ret = search(arr,sizeof(arr)/4,key);
    if(ret < 0)
        printf("查找失败\n");
    else
        printf("该数字为数组第%d个元素\n",ret+1);

    return 0;
}

运行结果:

请输入需要查找的数字:58
该数字为数组第6个元素
相关文章
|
23天前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
44 0
|
17天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
35 3
|
18天前
|
搜索推荐 算法
插入排序算法的平均时间复杂度解析
【10月更文挑战第12天】 插入排序是一种简单直观的排序算法,通过不断将未排序元素插入到已排序部分的合适位置来完成排序。其平均时间复杂度为$O(n^2)$,适用于小规模或部分有序的数据。尽管效率不高,但在特定场景下仍具优势。
|
1天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
15 4
|
2天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
18天前
|
前端开发 算法 JavaScript
无界SaaS模式深度解析:算力算法、链接力、数据确权制度
私域电商的无界SaaS模式涉及后端开发、前端开发、数据库设计、API接口、区块链技术、支付和身份验证系统等多个技术领域。本文通过简化框架和示例代码,指导如何将核心功能转化为技术实现,涵盖用户管理、企业店铺管理、数据流量管理等关键环节。
|
24天前
|
机器学习/深度学习 算法 PyTorch
Pytorch-SGD算法解析
SGD(随机梯度下降)是机器学习中常用的优化算法,特别适用于大数据集和在线学习。与批量梯度下降不同,SGD每次仅使用一个样本来更新模型参数,提高了训练效率。本文介绍了SGD的基本步骤、Python实现及PyTorch中的应用示例。
29 0
|
12天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
9天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
10天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。

推荐镜像

更多