(十九)查找算法-线性查找

news/2024/10/18 0:32:48/

1 查找算法基本介绍

在 Java 中,常用的查找算法有4种:
(1)顺序(线性)查找
(2)二分查找/折半查找
(3)插值查找
(4)斐波那契查找

2 线性查找

2.1 最简单的线性查找

线性查找法在生活中其实是很常见的,举个栗子吧:比如,你的书架上第一层有许多书,现在你想要从里面找到《编译原理》这本书,你会怎么找呢?通常你会从第一本开始看书名,如果是的就找到了直接拿出来,如果不是就继续下一本,以此类推,其实这样一个过程就是线性查找的过程。

下面通过一个实际的案例,实现一个线性查找。
有一个数列:{1, 9, 11, -1, 34, 89, 11},判断数列中是否包含此名称【顺序查找】。
要求:如果找到了,就提示找到,并给出下标值。
代码示例:

/*** 线性查找*/
public class SeqSearch {public static void main(String[] args) {int[] arr = {1, 9, 11, -1, 34, 89, 11};int index = seqSearch(arr, 11);if (index == -1) {System.out.println("未找到");}else{System.out.println("元素下标:" + index);}}public static int seqSearch(int[] arr, int val) {// 线性查找是逐一比对,发现有相同的值时,就返回下标for (int i = 0; i < arr.length; i++) {if (arr[i] == val) {return i;}}return -1;}
}

2.2 扩展-使用泛型

上面的程序实现了一个最基础最简单的整型数组的线性查找算法,现在来进一步的思考,将这个业务场景进一步的发散,在实际的应用中,可能遇到的数据类型不是整型的,比如字符型、浮点型甚至是自定义的Object类型,如果是这样的话很显然,上面的程序就无法满足了,这时可能就会根据对应的业务场景把上面的代码再Copy一份,然后对应的修改为需要的类型,这样写没什么问题,需求当然也是能实现的,但是这个实现的方式有点…,不说了自己体会吧。

实际上我们不必如此,如果能使用一个万能的类型不就搞定了吗,在调用的时候业务方是什么类型就传什么类型,程序的可扩展性是不是极大的提高了,而且也不用再复制出来那么多重复操作的代码了,所以思维方式决定了代码行数啊!

好,下面来说解决方案,基本上在每种程序语言中都有一个专门的语言特性是用来处理这种问题的,它可以让你的类或者是方法能够处理不同的类型,这种机制就是——泛型,关于泛型的基本用法这里不做介绍,下面就来把上面的代码通过泛型进行改造。
代码示例:

public class LinearSearch {// 私有构造器,放置外部实例化对象private LinearSearch(){}public static <T> int search(T[] data, T target){for (int i = 0; i < data.length; i++) {if(data[i].equals(target)){return i;}}return -1;}public static void main(String[] args) {//转换成对应的包装类Integer[] data = {2, 9, 5, 1, 8, 7, 3, 6};//target仍然可以传递数字,因为Java中有自动转换机制,编译器自动转换为对应的包装类int index = LinearSearch.search(data, 8);System.out.println(index);}}

http://www.ppmy.cn/news/51134.html

相关文章

《程序员面试金典(第6版)》面试题 16.03. 交点(直线的一般式方程,克莱姆法则,行列式,C++)

题目描述 给定两条线段&#xff08;表示为起点start {X1, Y1}和终点end {X2, Y2}&#xff09;&#xff0c;如果它们有交点&#xff0c;请计算其交点&#xff0c;没有交点则返回空值。 要求浮点型误差不超过10^-6。若有多个交点&#xff08;线段重叠&#xff09;则返回 X 值最…

服务(第十二篇)LVS-DR模式

数据包流向分析&#xff1a; &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Director Server 和 Re…

PCL点云库(3) — common模块

目录 3.1 common模块中的头文件 3.2 common模块中的基本函数 &#xff08;1&#xff09;angle角度转换 &#xff08;2&#xff09;distance距离计算 &#xff08;3&#xff09;random随机数生成 &#xff08;4&#xff09;sping扩展模块 &#xff08;5&#xff09;time获…

同步和异步的区别及优缺点 通俗理解

一、同步和异步的区别 程序里面的同步和异步和我们现实生活理解不太一样&#xff0c;一般我们对同步的理解是同时做很多事情&#xff0c;但程序中的同步是按照任务的顺序执行任务&#xff0c;前一个任务没有执行结束&#xff0c;下一个任务不会执行&#xff0c;要等待上一个任…

一个注解解决分布式锁和接口幂等性,springboot 实战 。强到离大谱

如今基本上都是分布式、多节点时代&#xff0c;我们业务代码中避免不了需要使用分布式锁。admin4j-lock 为我们提供分布式锁解决方案。支持redisson和zookeeper分布式锁 功能 支持redisson分布式锁和zookeeper 分布式锁 支持可重入锁 支持读写锁 支持红锁 redLock 支持一个…

Python 程序通过可执行文件部署

以下是两种常用的打包 Python 程序成 exe 的方式&#xff1a; PyInstaller&#xff1a; PyInstaller 是一个用于将 Python 程序打包成独立的可执行文件的工具。它可以自动解决 Python 程序的依赖性&#xff0c;并将所有必要的文件&#xff08;包括 Python 解释器&#xff09;…

2023年五月份图形化四级打卡试题

活动时间 从2023年5月1日至5月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

如何写出高质量代码——站在巨人的肩膀上

如何写出高质量代码——站在巨人的肩膀上 高质量代码的三要素&#xff1a;可读性&#xff0c;可维护性&#xff0c;可变更性可读性强可维护性&#xff1a;适应软件在部署和使用中的各种情况1.3 可变更性&#xff1a;因需求变化而对代码进行修改 牛顿曾经说过&#xff1a;如果说…