当前位置: 首页 > article >正文

每天学习一个基础算法之顺序查找

目录

前言:

1、对顺序查找概念的诠释

2、顺序查找的使用场景

 3、顺序查找的实现代码

顺序查找主体(以接口函数的形式)

测试部分(主函数调用)

 调试结果


前言:

查找也是一种经常使用的算法,即根据给定的值,在一组数据中找到一个等于给定值的记录或数据元素,例如查找列车车次、学号、房间号等等。今天我们要学习的是基础的查找算法之一线性查找。

1、对顺序查找概念的诠释

顺序查找也称线性查找,即从数据结构线性表的一端开始,顺序扫描,依次将扫描的结果与给定的值进行匹配,若相等则表示查找成功;若扫描结束仍然没有与给定值匹配的结果则表示查找失败。

2、顺序查找的使用场景

顺序查找多用于查找无序的数据,若对有序数据采用顺序查找进行查找,则会大大降低程序的运行效率。

(当遇到有序数据时,我们一般会采用二分查找法,它能大大提高查找的效率,对二分查找法我会放到下一篇博客中。)

注意:若只对少量数据只需进行查找,而不进行其它操作的情况下,为单纯使用二分查找法来增加效率,而对无序数据进行排序,其实效率是远不如直接用顺序查找法进行查找的。 所以学会使用顺序查找是必要的。

 3、顺序查找的实现代码

顺序查找的代码是十分容易实现的,它本质上就是对一个数组进行遍历。本次代码仍然以函数形式呈现。

顺序查找主体(以接口函数的形式)

//线性查找法的实现
int linear_seek(int arr[], int sz, int target)
{
    int i = 0;
    for (i = 0; i < sz; i++)
    {
        if (arr[i] == target)
        {
            return i;
        }
    }
    return -1;
}

 实现思路:

对传入数组进行遍历(顺序扫描),若匹配结果与给定值相同,返回遍历到数的下标(索引),若遍历到最终仍然没有与给定值匹配的结果则返回-1(-1可以改为任何与查找到的返回值不冲突的值),表示数组中没有与给定值相等的数据。

测试部分(主函数调用)

#include <stdio.h>
int main()
{
    int arr[] = { 10,7,4,9,6,1,8,3,2,5 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    
    int ret = linear_seek(arr, sz, 4);
   
    if (ret != -1)
    {
        printf("下标为%d\n", ret);
    }
    else
    {
        printf("没找到!\n");
    }
    return 0;
}

 调试结果

 

每日一学,今天你又超过了百分之九十九的人。

如果本篇文章对你有帮助,请点个关注和赞吧!

若是对本文有什么独特的见解,也可以在评论区进行讨论。


http://www.kler.cn/a/283264.html

相关文章:

  • C语言入门到精通(第六版)——第十六章
  • 844.比较含退格的字符串
  • Scala学习记录,case class,迭代器
  • Llama架构及代码详解
  • 前端:块级元素和行内元素
  • 《C++在金融领域的技术革命:高效、安全与创新的融合》
  • Python观察者模式:构建松耦合的通信机制
  • 深入理解归并排序
  • C++,如何写单元测试用例?
  • PHP语言有哪些优势和特点?
  • C语言通用函数 - 判断ip是否合法
  • 顺序表和链表知识点
  • 运维学习————Docker自制镜像并上传至阿里云以及Docker Compose的使用
  • vmware解决虚拟机空间占用不断增大问题
  • FFmpeg源码:ffurl_seek2、ffurl_seek、avio_size函数分析
  • 使用HTML实现贪吃蛇游戏
  • 小猫爬山 dfs/状压
  • Redis中的数据类型及应用场景(面试版)
  • macos 自定义用户目录方法, /Users/xxx 用户文件存储路径自定义方法
  • 构建在线教育系统源码:企业培训APP开发的技术指南
  • 在中国使用wordpress建网站的主要有三类人
  • TransmittableThreadLocal
  • Word文档被锁定无法编辑怎么办?一键快速移除Word编辑限制
  • 计算机网络803-(3)数据链路层
  • 行为型设计模式-状态(state)模式
  • 并发容器简介