java实现插值查找算法

【查找算法(二)】插值查找的Java实现 插值查找 在介绍插值查找之前,首先考虑一个新问题,为什么二分查找算法一定要是折半,而不是折四分之一或者折更多呢?   打个比方,在英文字典里面查“apple”,你下意识翻开字典是翻前面的书页还是后面的书页呢?如果再让你查“zoo”,你又怎么查?很显然,这里你绝对不会是从中间开始查起,而是有一定目的的往前或往后翻。   同样的,比如要在取值范围1 ~ 10000 之间 100 个元素从小到大均匀分... 阅读详情

一、介绍

1、插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。
2、将折半查找中的求mid索引的公式,low表示左边索引left,high表示右边索引right. key 就是前面我们讲的 findVal
在这里插入图片描述
3、int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/插值索引/
对应前面的代码公式:

int mid = left + (right – left) * (findVal – arr[left]) / (arr[right] – arr[left])

4、举例说明插值查找算法 1-100 的数组
在这里插入图片描述

二、代码

package search;

/**
 * @program: text
 * @description: 插入排序
 * @author: min
 * @create: 2019-08-04 12:41
 **/
public class InsertValueSearch {
    public static void main(String[] args) {
        int arr[] = {1, 8, 10, 89, 1000, 1000, 1234};
        int index = insertValueSearch(arr, 0, arr.length - 1, 89);
        System.out.println("index = " + index);
    }

    /**
     * @param arr     数组
     * @param left    左边索引
     * @param right   右边索引
     * @param findVal 查找值
     * @return 如果找到,就返回对应的下标,如果没有找到,返回-1
     */
    public static int insertValueSearch(int[] arr, int left, int right, int findVal) {
        
        //注意:findVal < arr[0] 和 findVal > arr[arr.length - 1] 必须需要
        // 否则我们得到的 mid 可能越界
        if (left > right || findVal < arr[0] || findVal > arr[arr.length - 1]) {
            return -1;
        }

        // 求出 mid, 自适应
        int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);
        int midVal = arr[mid];

        if (findVal > midVal) { // 说明应该向右边递归
            return insertValueSearch(arr, mid + 1, right, findVal);
        } else if (findVal < midVal) { // 说明向左递归查找
            return insertValueSearch(arr, left, mid - 1, findVal);
        } else {
            return mid;
        }
    }
}

三、插值查找注意事项:

  1. 对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找, 速度较快.
  2. 关键字分布不均匀的情况下,该方法不一定比折半查找要好

 

转载至:尚硅谷_韩顺平_图解Java数据结构和算法

本文原味地址:https://blog.youkuaiyun.com/qq1137623160/article/details/98457830

Java:实现插值查找算法(附完整源码) 阅读详情

相关推荐

Western blot (WB) 灰度分析进阶指南:ImageJ 高效定量技巧与实战优化

本文详细介绍了使用ImageJ进行Western blot灰度分析的进阶技巧,包括批量处理、背景校正和疑难条带处理等实战优化方法。通过自动化宏脚本和动态背景校正,显著提升分析效率和准确性,特别适合科研人员处理复杂WB数据。

weixin_42557830的博客 902

假设检验之t检验详解

假设检验之t检验详解 文章目录假设检验之t检验详解0. 背景故事1. 从一个例子引入t检验的思路3. t分布 参考:https://blog.youkuaiyun.com/Tonywu2018/article/details/83897806 0. 背景故事 t检验又叫学生t检验(Student‘s t test),它是由20世纪爱尔兰的一家啤酒厂-健力士酒厂的一名员工(戈斯特)采用笔名“Student”发...

lankuohsing的博客 1万+

别再到处找包了!Keil5芯片支持包(Pack)最全管理指南:安装、更新、迁移与离线备份

本文详细解析了Keil5芯片支持包(Pack)的全生命周期管理,包括安装、更新、迁移与离线备份的工程化解决方案。针对STM32F10x等常见芯片,提供了高效获取Pack的策略、版本管理技巧及团队协作方案,帮助开发者解决常见的'Device Family Pack missing'等问题,提升嵌入式开发效率。

weixin_28729205的博客 542

t检验的p值对照表_t分布与检验小结

t 分布t分布(t-distribution),用于根据小样本来估计呈正态分布且方差未知的总体的平均值如果总体方差已知,则应该使用正态分布自由度越大,t分布越接近标准正太分布随自由度的增大,t分布逐渐逼近标准正太分布t分布曲线的特点:t分布曲线是单峰分布,它以0为中心,左右对称t分布的形状与样本数n有关。自由度越小,t值越分散,曲线的峰部越矮t分布不是一条曲线,而是很多曲线的集合(一簇曲线)t界值...

weixin_39936403的博客 13万+

深入浅出:利用NXP S32K3xx的HSE模块实现OTA双分区(AB Swap)与安全回滚

本文深入解析NXP S32K3xx HSE模块在汽车电子OTA双分区架构中的工程实践,详细介绍了HSE模块如何通过AB Swap双分区机制实现固件安全升级与毫秒级回滚。内容涵盖内存重映射硬件原理、分区切换异常处理及寄存器级诊断方法,为开发高可靠嵌入式系统提供实战指导。

weixin_30919429的博客 797

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

java插值查找算法

请对一个有序数组进行插值查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下。插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找, 速度较快.关键字分布不均匀的情况下,该方法不一定比折半查找要好。举例说明插值查找算法 1-100 的数组。标,如果没有就提示"没有这个数"。

papillonlong的博客 711

Python多进程实战:用BaoStock高效下载股票历史数据的5个优化技巧

本文详细介绍了使用Python多进程技术通过BaoStock高效下载股票历史数据的5个优化技巧。从理解BaoStock的数据获取机制到进程池配置、智能任务分片、异常处理及性能监控,帮助开发者显著提升数据下载效率,特别适合量化交易领域的数据采集需求。

weixin_30369041的博客 460

(二)Java算法:插值查找

插值查找

嘉禾嘉宁papa 6140

javafx结合Scene Builder自定义fxml实现漂亮的登录界面、自定义最小化、关闭按钮

本节主要介绍了如何结合Scene Builder工具来制作一个好看又漂亮的登录界面,以及介绍了如何在程序中调用生成界面文件fxml文件,如何获取到fxml文件中的组件等,并演示登录、最小化和关闭等功能。

c1007857613的专栏 5223

前言:为什么要学习爬虫和逆向,该如何学习?

学习爬虫和逆向技术是当今数字化时代的重要技能,尤其在数据分析、安全研究、自动化工具开发等领域有广泛应用。以下是详细的学习理由、路径和方法:

数据知道的博客 1万+

Java:实现插值查找算法(附带源码)

Java:实现插值查找算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1034

R语言 百度坐标转换至WGS84坐标

本文利用R语言封装了百度坐标转换至WGS84坐标的函数,亲测有效,提供了便捷的百度坐标转换方法。

qingchen98的博客 2135

查找算法—顺序查找、二分查找、插值查找、斐波那契查找算法的详解以及Java代码的实现

详细介绍了常见的4种查找算法,比如顺序查找/线性查找、二分查找/折半查找、插值查找、斐波那契查找等,并且提供了相应的Java代码实现。

终生学习践行者 3066

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java实现插值查找算法 Insert search

下面带来Java版本插值查找算法的实现,本篇一些概念沿用上一篇博客,入数组左索引为left,右索引为right。先说明一下,插值查找算法要求待查找的数组为有序的。 插值查找原理: 1.插值查找算法类似于二分查找,不同的是插值查找每次从只适应的mid处开始查找; 2.在二分查找中,求mid的公式为: 插值算法将求mid的公式改进为: 对应的代码为:int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[l

ThinkingInGIS的博客 848

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java实现插值查找算法

方法接受一个有序数组和目标值,并返回目标值在数组中的索引位置。如果目标值不在数组中,则返回-1。Java实现插值查找算法。Java实现插值查找算法。

adendean的博客 365

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

插值查找算法Java实现

1-插值查找 插值查找算法是对二分查找的升级做法,具体做法是 二分查找与插值查找: 修改了计算mid中间索引的公式 2-插值查找的Java实现 package select; /** * 插值查找 */ public class InsertValueSearch { public static void main(String[] args) { int arr[] = {1, 8, 10, 89, 1000, 1000, 1234}; int i = i

她的妈妈爱上我的博客 257

用Java实现插值算法查找

代码思路 插值查找的思路与二分法相似,小部分不知道什么是二分法的比较帅的观众请看我另一篇关于二分法介绍的文章 那么插值查找和二分法查找有什么不同呢,二分法查找mid的索引公式是(left+right)/2,插值查找的mid =left+(right-left)*(findValue-arr[left])/(arr[right]-arr[left]),这是一个自适应的mid,相较于二分法它可以更趋近于你要寻找的数字 代码实现 public static int insertvalueSearch(int []

qq_45739810的博客 333

【算法】Java实现常用查找算法一(顺序查找、对分查找、插值查找、斐波那契查找)

查找算法前言顺序查找原理流程分析代码实现对分查找原理流程分析代码实现插值查找原理流程分析代码实现斐波那契查找原理流程分析代码实现 前言 查找在实际的工作中不可谓不重要,从大量的数据中找到自己需要的数据肯定不能是数数一样一个一个来,有效的查找算法可以在实际运用中大大加快工作效率。 查找算法按照表的功能分为静态查找和动态查找(查找的表是否存在插入和删除),按照表内元素的顺序分为有序查找和无序查找。 文章开头先贴出实现的代码结构: public class MySeek { public static voi

TiramisuDP的博客 624

java 均值插值_Java数据结构和算法-插值查找算法代码实现

package com.young.search;public class InsertValueSearch {public static void main(String[] args) {int[] arr = new int[100];for (int i = 0; i < 100; i++) {arr[i] = i + 1;}int index = insertValueSearc...

weixin_39756481的博客 131

查找算法_03_插值查找(附java和python语言的编程实现)

插值查找 基本思想 图解示例 编码提要 java语言的编程实现 python语言的编程实现

会呼吸的梦 278

查找算法java实现——插值查找

插值查找一、基本思路二、算法分析三、代码实现 一、基本思路 插值查找,有序表的一种查找方式。插值查找是根据查找关键字与查找表中最大最小记录关键字比较后的查找方法。插值查找基于二分查找,将查找点的选择改进为自适应选择,提高查找效率。 要注意的是:插值查找除了和二分查找一样要求查找表是顺序存储的有序表外,数据元素的关键字在查找表中最好均匀分布,这样,就可以按比例插值。 基本思路: 插值查找的大体思路和二分查找是一样的,只是不再是递归的从序列的mid进行划分,而是将原来的: 替换为:(相当于将原来的1/2替

猪奥奥的Blog 303
上一篇: java实现斐波那契(黄金分割法)查找算法
下一篇: java实现二分查找算法
Roger_CoderLife
博客等级 码龄9年 211粉丝 52原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值