• 经典算法——顺序查找


    😁学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰👍

    活动地址:CSDN21天学习挑战赛⭐️⭐️⭐️

    顺序查找

    顺序查找也叫线性查找

    查找过程:从列表中的第一个元素开始,逐个元素进行比较,如果找到相等的元素,则 查找成功 ,如果直至表中最后一个记录数与目标值都不相等,则表示 查找失败
    顺序查找算法适用于绝大多数场景,既可以在有序序列中查找目标元素,也可以在无序序列中查找目标元素。

    算法效率

    算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间。

    实现思路

    给定一个查找表

    在这里插入图片描述

    设:查找的目标值为67,步骤如下

    1. 从表中的第一个元素开始比较,51 != 67,指针右移

    在这里插入图片描述

    1. 指针指向第二个元素,也就是4, 4 != 67,指针右移

    在这里插入图片描述

    1. 指针指向第三个元素,也就是1212 != 67,指针右移

    在这里插入图片描述

    1. 指针指向第四个元素,也就是6767 == 67查找成功

    在这里插入图片描述

    代码实现

    Java代码实现

    定义顺序查找方法

     private int orderFind(int number) {
            //定义一个数组
            int[] arr = {51, 4, 12, 67, 45, 23, 68, 32};
    
            //定义数组下标
            int i = 0;
            //便利整个数组
            while (i < arr.length) {
                //如果当前元素和number相等,直接返回当前的下标
                if (arr[i] == number) {
                    return i;
                }
                //每循环一次,下标+1
                i++;
            }
            //如果最后未找到,那么返回一个标识 -1
            return -1;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    调用方法

    // 定义要查找的数字
    int findNum = 67;
    // 顺序查找 67这个数字在数组中的位置
    int i = orderFind(findNum);
    //如果结果不为-1,那么说明在数组中匹配到了相等的元素
    if(i != -1){
        System.out.println("在数组中匹配到数字,下标为:" + i );
    }else{
        System.out.println("在数组中未找到");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    效率分析

    时间复杂度

    • 最坏的情况

    最坏的情况就是完整的遍历了整个集合,也并未找到目标的key,此时循环被完整的执行,循环执行次数与n相关,所以时间复杂度为O(n)

    • 最好的情况

    最好的情况就是第一次就找到了元素,此时的时间复杂度为常数级O(1)

    • 平均情况

    综合两种情况,顺序查找的时间复杂度为O(n),属于查找较慢的算法。

    空间复杂度

    由于算法不会改变原有的元素集合,只需要一个额外的变量控制索引变化,所以空间复杂度为常数级:O(1)

    顺序查找的优缺点

    1)缺点:查找效率较低,特别是当待查找集合中元素较多时,不推荐使用顺序查找。
    2)优点:算法简单而且使用面广。

  • 相关阅读:
    Python 求矩阵的局部极大值
    【基本数据结构 三】线性数据结构:栈
    (日积月累版)大数据基础知识点1-关系型数据库
    【leetcode41-----可被5整除的二进制前缀】
    华为云云耀云服务器L实例评测|云耀云服务器L实例部署HertzBeat实时监控系统
    python+django体质测试数据分析及可视化设计
    NFT游戏有哪些?盘点当前热门的NFT游戏
    Oracle Users表空间重命名
    Java SPI(Service Provider Interface)
    【MySQL】 MRR
  • 原文地址:https://blog.csdn.net/weixin_43847283/article/details/126111686