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

java 线性搜索算法

时间:2024-03-14 11:32:19浏览次数:42  
标签:arr java 元素 搜索算法 搜索 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] 进行比较

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

// Java code for linearly searching x in arr[]. 
 
import java.io.*;
 
class GFG {
    public static 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
    public static void main(String args[])
    {
        int arr[] = { 2, 3, 4, 10, 40 };
        int x = 10;
 
        // Function call
        int result = search(arr, arr.length, x);
        if (result == -1)
            System.out.print(
                "Element is not present in array");
        else
            System.out.print("Element is present at index "
                             + result);
    }
}

输出
元素出现在索引 3 处

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

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

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

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

标签:arr,java,元素,搜索算法,搜索,key,线性
From: https://blog.csdn.net/hefeng_aspnet/article/details/136616746

相关文章

  • Java线程池参数详解及其示例
    线程池在Java并发编程中占据核心地位,通过复用线程资源,可以极大地提高系统资源利用率和响应速度。Java中的java.util.concurrent.ThreadPoolExecutor类提供了丰富的参数配置以满足不同场景的需求。下面我们将逐一介绍线程池的主要构建参数,并给出相应的例子说明:1.corePoolSi......
  • 【Javascript】 Promise 对象(二)
    Promise.all()Promise.all()方法用于将多个Promise实例,包装成一个新的Promise实例。constp=Promise.all([p1,p2,p3]);上面代码中,Promise.all()方法接受一个数组作为参数,p1、p2、p3都是Promise实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Pr......
  • 【JavaScript】闭包
    闭包的引入我们知道,变量根据作用域的不同分为两种:全局变量和局部变量。函数内部可以访问全局变量和局部变量。函数外部只能访问全局变量,不能访问局部变量。当函数执行完毕,本作用域内的局部变量会销毁。比如下面这样的代码:functionfoo(){leta=1;}foo(......
  • 关于java.net.URLEncoder.encode()将空格转成+问题
    1.情景展示如上图所示,当我们使用jdk自带的类对数据进行URL编码时,空格会被转成+。这其实是不对的,我们知道:空格对应url编码是:%20,所以,jdk自带的URLEncoder将空格转成+是不对的。如何解决?2.解决方案既然jdk自带的URLEncoder有问题,我们就有两种解决办法。一种是仍然使用它,然......
  • 风控规则引擎(一):Java 动态脚本
    风控规则引擎(一):Java动态脚本日常场景共享单车会根据微信分或者芝麻分来判断是否交押金汽车租赁公司也会根据微信分或者芝麻分来判断是否交押金在一些外卖APP都会提供根据你的信用等级来发放贷款产品金融APP中会根据很复杂规则来判断用户是否有借款资格,以及贷款金额。......
  • 阿里一面:Java中如何停止线程?
    引言在Java多线程编程中,正确且安全地停止线程是一项关键技能。简单粗暴地“杀死”线程不仅可能导致数据不一致性,还可能引发各种难以预测的错误。本文将探讨几种在Java中优雅地停止线程的方法,以确保程序的健壮性和可靠性。使用标志位(共享变量)停止线程一种常见的做法是使用一个bo......
  • 「Java开发指南」MyEclipse如何支持Spring Scaffolding?(五)
    在上文中(点击这里回顾>>)主要为大家介绍了SpringDSL模型等内容,本文将继续介绍菜单等。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论6.菜单本节主要描述与Spring支持的MyEclipse相关的各种菜单。6.1MyEclipse菜单当您右键单击Eclipse项目......
  • 面试了一个 5 年 Java 程序员,一个问题也不会。。
    大家好,我是R哥。周末愉快呀,最近我在做Java面试辅导,也模拟面试了好些个学员,说说其中一个学员吧,一个工作5年的Java程序员,模拟面试,居然一个问题也不会。。当晚模拟面试完,我的心情很复杂。我之前做系统架构师,同时也是面试官,这些年,少说也面试过几百上千人,不乏知识渊博、技能顶......
  • 【JavaScript】面试手撕柯里化函数
    ......
  • 图解Java并发编程第一章总结【精炼版】
    【第一章】图解Java并发编程Java线程的基本操作yield操作:yield操作,在基于时间片轮转的cpu调度算法中,用来放弃当前时间片sleep操作:sleep操作分为三种情况普通sleep:在指定时间内放弃cpu使用权,不释放同步锁sleep(0):作用与yield相同sleep被中断:抛出中断异常......