Java 常用查找算法

JAVA中常用算法详解:排序(冒泡、快速排序)与查找(二分查找) ​。 阅读详情

面试中经常会问一些查找算法,今天来总结一下常用的查找算法


一、顺序查找


描述:从表中的第一个或者是最后一个记录开始,将表中记录的关键字和给定的值进行逐个比较,若某个记录的关键字和给定值相             等,则查找成功,若表中所记录的关键字和给定值都不相等,则查找失败。

算法实现:

    /**
     * 顺序查找
     *
     * @param searchKey 要查找的值
     * @param array     数组(从这个数组中查找)
     * @return 查找结果(数组的下标位置)
     */
    public static int orderSearch(int searchKey, int[] array) {
        if (array == null || array.length < 1)
            return -1;
        for (int i = 0; i < array.length; i++) {
            if (array[i] == searchKey) {
                return i;
            }
        }
        return -1;
    }

二、二分查找


描述:折半查找的前提条件是在一个有序的序列汇总,首先确定待查询记录所在的区间,然后逐步的缩小范围区间直到找到或者找             不到该记录为止,与数学中的二分法一样。

算法实现:

    /**
     * 二分查找(折半查找),它是一种效率较高的查找方法
     * 二分查找要求:1.必须采用顺序存储结构
     * 2.必须按关键字大小有序排列
     *
     * @param array     有序数组 *
     * @param searchKey 查找元素 *
     * @return searchKey的数组下标,没找到返回-1
     */
    public static int binarySearch(int[] array, int searchKey) {

        int low = 0;
        int high = array.length - 1;
        while (low <= high) {
            int middle = (low + high) / 2;
            if (searchKey == array[middle]) {
                return middle;
            } else if (searchKey < array[middle]) {
                high = middle - 1;
            } else {
                low = middle + 1;
            }
        }
        return -1;
    }


三、分块查找

描述:

1)首先将查找分成若干块,在每一块中数据元素的存放是任意的,但块与块之间必须是有序的(假设这种排序是按关键字值递增的,也就是说在第一块中任意一个数据元素关键字都小于第二块中所有数据元素的关键字,第二块中任意一个数据元素的关键字都小于第三块中所有元素的关键字,依次轮推)

2)建立一个索引表,把每块中最大的关键字值按块的顺序放在一个辅助数组中,这个索引表也按升序排列。

3)查找时先用给定的关键字值在索引表中查找,确定满足条件的数据元素存放在那个块中,查找方法既可以是折半也可以是顺序查找

4)再到相应的块中顺序查找,便可以得到查询结果

算法实现:


    /**
     * 分块查找
     *
     * @param index 索引表,其中放的是各块的最大值
     * @param st    顺序表,
     * @param key   要查找的值
     * @param m     顺序表中各块的长度相等,为m
     * @return
     */
    public static int blockSearch(int[] index, int[] st, int key, int m) {
        // 在序列st数组中,用分块查找方法查找关键字为key的记录
        // 1.在index[ ] 中折半查找,确定要查找的key属于哪个块中
        int i = binarySearch(index, key);
        if (i >= 0) {
            int j = i > 0 ? i * m : i;
            int len = (i + 1) * m;
            // 在确定的块中用顺序查找方法查找key
            for (int k = j; k < len; k++) {
                if (key == st[k]) {
                    System.out.println("查询成功");
                    return k;
                }
            }
        }
        System.out.println("查找失败");
        return -1;
    }

今天就先说这三个,后期会继续添加



java 几种查找算法 立即下载

相关推荐

lvds接口_LVDS,接口,时序讲解,非常好的文章

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群1.1.1 LVDS接口分类1.1.1.1 单路6bit LVDS这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。1.1.1.2 双路6bit LVDS这种接口电...

weixin_39639286的博客 1902

七大查找算法(Java版)

七大查找算法 顺序查找、二分查找、插值查找、斐波那契查找、二叉树查找、分块查找、哈希查找

HK的博客 1万+

Qi标准无线充学习笔记

负载调制主要通过接收端向后散射调制计数使得功率信号改变,两者通过线圈的电压和电流的变化量来传输信号。下面是要求稳定电流的变化量不得超出8ma,判断稳定的时间至少要在150us稳定电压的变化量不得超出110mv,判断稳定的时间至少要在150us高低电流变化量至少需要15mA,判断稳定的时间至少要在100us,主线圈电流采样的时间是在半桥转换的1/4周期刻测量的高低电压变化量至少需要200mV,判断稳定的时间至少要在100us。

m0_73991989的博客 1010

day21-算法

​ 数据结构是数据存储的方式,算法是数据计算的方式。所以在开发中,算法和数据结构息息相关。今天的讲义中会涉及部分数据结构的专业名词,如果各位铁粉有疑惑,可以先看一下哥们后面录制的数据结构,再回头看算法。

m0_51681861的博客 513

微信小程序 实现拼图功能

微信小程序 实现碎片拼图

weixin_45689786的博客 2250

图解转置卷积原理

声明:本文大部分搬运自【机器学习】详解 转置卷积 (Transpose Convolution) 感谢博主花与人间事同,本人只是在博主原创文章上做补充以及添加一些自己的理解。 1 转置卷积的背景 通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务 (如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,称为上采样 (Upsample),如下图所示: 上采样方法有很多,详见【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值

laonafahaodange的博客 5685

Java中的算法,7种查找算法和4种排序算法

基本思想:二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。更多的是先计算出当前数据的哈希值,用哈希值跟数组的长度进行计算,计算出应存入的位置,再挂在数组的后面形成链表,如果挂的元素太多而且数组长度过长,我们也会把链表转化为红黑树,进一步提高效率。但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数据是否在容器当中,返回的索引无实际的意义。因此被称为黄金分割。

2301_79350076的博客 1200

SAE ARP 4761A内容详解

SAE ARP 4761A主要为民用航空系统及设备的安全评估提供指南,帮助制造商和设计者满足FAA的FAR 25.1309等适航标准的要求。该文档旨在为航空器和航空系统设计中涉及的安全评估流程提供一个结构化的框架,并结合一系列工具和方法,如故障树分析(FTA)、依赖图分析(DD)、马尔可夫分析(MA)等,来系统地评估潜在的安全隐患。这一标准不仅适用于大型航空器的设计和评估,还可以应用于各种类型的飞行系统,如无人驾驶飞行器(UAV)和新型的电动垂直起降飞机(eVTOL)。

qq_41854911的博客 3149

【java查找算法】

【代码】【java查找算法】

weixin_39719973的博客 232

【图像拼接】论文精读:As-Rigid-As-Possible Shape Manipulation(ARAP)

文章目录前言1.摘要2.算法的总体流程总结 前言 图像变形算法 1.摘要 论文提出了一个二维图形互动系统。图形是建立在三角形网格上的,用户只需移动几个网格顶点(限制顶点),系统通过最小化每个三角形的误差计算网格剩余顶点(自由顶点)的位置。 算法分两步: 适当旋转每个三角形。 调整大小。 关键是使用二次度量误差将最小化问题转换成线性方程组,然后再解这个方程组。 刚性形状变形是很难的,论文的研究使其变得简单。 2.算法的总体流程 总的流程分三步: 将图形用三角形网格覆盖 选择三个点(限制顶点) 操纵限

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 15万+

第95节:多模型多卡推理管理

多模型推理:在同一硬件平台上同时部署多个不同或相同的深度学习模型,满足多任务需求。多卡推理:利用多块 GPU 资源,提升推理吞吐量与并发能力。目标:合理分配 GPU 资源,实现高效、低延迟的推理服务。

yumeiguo的博客 218

Java实现四种【查找算法】+图解+完整代码+分析

参考书目:《大话数据结构》 一.哨兵法: 1.思路图解: 2.代码实现: public class SentrySearch { public static int search(int[] a, int key) { int i; a[0] = key; // 设置a[0]存储要查找的值,称之为“哨兵” i = a.length - 1; // 循环从数组尾部开始 while (a[i] != key) {

Zhou_LC的博客 2926

YOLOv5改进系列(4)——添加ECA注意力机制

手把手教你在YOLOv5中加入ECA注意力机制,文内含两种方法,小白也能看懂!

路人贾的博客 8547

常用的查找算法(Java实现)

本文介绍了几种常见的查找算法,包括线性查找、二分查找、哈希查找和跳表查找。每种查找算法都有其优缺点,具体选择哪种算法要根据实际场景来决定。线性查找:适用于小规模数据,简单但效率较低。二分查找:适用于有序数据,效率较高,时间复杂度为O(log n)。哈希查找:适用于大规模数据,查找效率极高,时间复杂度为O(1),但需要额外的空间。跳表查找:适用于需要高效查找、插入和删除的场景,时间复杂度为O(log n),但实现较为复杂。希望本文能帮助你更好地理解常用查找算法,并在实际开发中选择合适的查找方式。

L13290287351的博客 1957

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

常用的查找算法(java实现)

java中常用的查找算法有4种: 顺序(线性)查找 二分查找 插值查找 斐波那契查找 一、顺序(线性)查找 顺序(线性)查找只需要数组的顺序依次进行查找,找到后返回数组的下标即可。顺序查找适用于任何数据。缺点是当查找越后面的数花费的时间越长。 二、二分查找 二分查找的前提条件是这个数组是有序的。 二分查找思路: 确定数组中间的下标与值。 将要查找的数与中间的数进行比较:若比中间的数小,则向比中间值大的区间查找,若比中间数小,则向比中间值小的区间查找,重复第二步,知道找到该数。 代码实现: publi

IT成长记 890

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java中常用的排序和查找算法

本文内容来自网络资源整理,若有错误,敬请指正。java中的常用排序方法java中常用的几种排序方法:选择排序、插入排序、快速排序、冒泡排序、归并排序、shell排序。 java 中的查找方法有:顺序查找法、二分查找法选择排序思路:在乱序数组中,假设第一位数最小,依次让后面的数与之比较,若遇到比它小的数就交换位置,一趟下来第一个数就是序列中最小的数,然后从第二个数开始重复操作。 public

九洱东的博客 9188

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java常用查找算法

本文总结Java常用查找算法顺序查找算法,线性查找算法,二分查找算法,分块查找算法和哈希查找算法。 1、顺序查找算法 /*** * 顺序查找算法按数组的顺序从前往后一直比较,直到找到目标值返回。 * 参考链接:http://developer.51cto.com/art/201406/443115.htm * http://blog.youkuaiyun.com/qq284565035/artic...

HelloWorld搬运工 1437

Java中常用的查找算法——顺序查找和二分查找

Java中常用的查找算法——顺序查找和二分查找 一、顺序查找: a)原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位。 b)图例说明: 原始数据:int[]a={4,6,2,8,1,9,0,3};要查找数字:8 代码演示: import java.ut...

hekliu的博客 396

Java 查找算法之常用的3种查找算法

线性查找 /** * 功能描述: * 〈 * 线性查找 * 〉 * * @className: ArraySearch * @author: hf * @version: 1.0.0 * @date: 2019/8/14 14:34 * @param: [arr 数组, val 要查找的...

战丶后风!!的博客 6743

黑马Java基础笔记-13常用查找算法

数学表达αnmαmn​,其中nnn为哈希表中当前元素数,mmm为桶的总数或槽位总数。意义:表示哈希表的“填充率”,负载因子高意味着更多的键映射到相同或相邻的位置,冲突概率也随之升高,从而增大查找或插入时的探测或链表长度。再哈希是指在哈希表运行过程中,检测到负载因子α\alphaα达到或超过预设阈值后,动态地创建一个更大的新表(通常容量翻倍),并将旧表中所有元素按照新表大小重新计算哈希并插入新表的过程。这一过程又称“扩容”(resize)或“重散列”,旨在降低α\alphaα。

IKUNIKUNIKUNikun的博客 796

在Java中最常用的四种查找算法

查找算法 在Java中,我们常用的查找算法有四种: 线性查找 二分查找 插值查找 斐波那契出擦找 1. 线性查找 在这就不详细说了,相当于数组遍历的工程,找到了就返回下标,没有就返回-1,实用于有序无序 2. 二分查找 故名思意,一半一半的向要查找的值趋近,就想猜数游戏,大了,那你就猜比你小一半的数,适用于有序数组 思路: 上代码: public class BinarySearch { //递归 public static int binarySearchRecursion(int[

AJ_007的博客 899

java常用的查找排序算法

从第一个记录开始,逐个比较。 二分法查找: 对有序数组折半查找。 排序算法: 冒泡排序: 基本思想:对排序序列,依次比较,如果逆序就交换,每次排序得到一个最大值,重复前面的步骤,直到没有任何一对需要比较。最快:正序。最慢:反序。...

weixin_48747169的博客 282

Java中常用的4种查找算法详解

Java中常用的4种查找算法详解 4种常用的查找算法 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找 1.顺序(线性)查找 逐一比对,发现相同值时返回下标 2.二分查找/折半查找 -要求待查找的数组必须有序 3.插值查找 1.与二分查找类似,mid的计算方式不一样 2.对于分布不均匀的数据,插值查找不一定比二分查找快

Creepin_的博客 955

JAVA常用查找算法

​ 在 JAVA 中,常用的查找有四种 9.3 二分查找(Binary Search) 注意!​ 二分查找仅适用于有序数组!思路分析代码演示 9.4 插值查找(Interpolation Search) 插值查找原理介绍代码演示 插值查找注意事项斐波那契法(黄金分割法)基本介绍斐波那契原理​ 斐波那契查找原理与前两种相似,仅仅改变了中间节点(mid)的位置,mid不再是中间或者插值得到,而是位于黄金分割点附近,即 对 F(k-1)-1的理解由斐波那契数列 的性质,可以得到 。该式说明:只要顺序表的长度为

crisp077的博客 1100

Java中的常用排序算法和查找算法

Java中的常用排序算法和查找算法 冒泡排序算法 存在10个不同大小的气泡,由底至上地把较少的气泡逐步地向上升,这样经过遍历一次后,最小的气泡就会被上升到顶(下标为0),然后再从底至上地这样升,循环直至十个气泡大小有序。 在 冒泡排序中, 最重要的思想是两两比较,将两者较少的升上去 冒泡排序最坏情况的时间复杂度是O(n²) public class BubbleSort { public static void main(String[] args) { Scanner sc = new Sca

MIMANCHI123的博客 334
上一篇: Android 使用 CrashHandler 来获取应用的 crash 信息
下一篇: Java 阿里官方代码规范标准手册终极版下载
QDJdeveloper
博客等级 码龄11年 108粉丝 49原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值