Java实现插值查找算法 Insert search
下面带来Java版本插值查找算法的实现,本篇一些概念沿用上一篇博客,如数组左索引为left,右索引为right。先说明一下,插值查找算法要求待查找的数组为有序的。
插值查找原理:
1.插值查找算法类似于二分查找,不同的是插值查找每次从只适应的mid处开始查找;
2.在二分查找中,求mid的公式为:
插值算法将求mid的公式改进为:
对应的代码为:int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left])
代码实现:
public class InsertValueSearch {public static void main(String[] args){int[] arr = new int[100];for(int i=0; i< arr.length; i++){arr[i]= i + 1;}int index = insertValueSearch(arr, 0, arr.length-1, 100);System.out.println("查找的索引为:" + index);}/*** * @param arr 数组* @param left 左索引 * @param right 右索引* @param findVal 要查找的值* @return 返回所找到值的索引,如果没有则返回-1*/public static int insertValueSearch(int[] arr, int left, int right, int findVal){System.out.println("插值算法被调用");//findVal < arr[0] 与findVal > arr[arr.length-1] 必须要写,不然假如findVal过大时,容易导致mid 越界if(left > right || findVal < arr[0] || findVal > arr[arr.length-1]){return -1;}int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);int res = arr[mid];if(findVal > res){//向右递归return insertValueSearch(arr, mid + 1, right, findVal);}else if(findVal < res){return insertValueSearch(arr, left, mid - 1, findVal);}else{return mid;}}}
当查找数值100时,方法只调用了一次,就可以找到100的索引。结果如下图所示:
插值查找注意事项:
1.对于数据量大,关键字(数值)分布比较均匀的查找表来说,采用插值查找,速度较快
2.关键字分布不均匀(数值的跳跃性很大)的情况下,该方法不一定比二分法查找要好
Java实现插值查找算法 Insert search相关推荐
- C语言实现interpolation search插值查找算法(附完整源码)
interpolation search插值查找算法 interpolation search插值查找算法的完整源码(定义,实现,main函数测试) interpolation search插值查找算 ...
- JavaScript实现Interpolation search插值查找算法(附完整源码)
JavaScript实现Interpolation search插值查找算法(附完整源码) interpolationSearch.js完整源代码 interpolationSearch.test.j ...
- 二十二、插值查找算法
一.插值算法的介绍 1)插值算法原理介绍 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找. 2)将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, ...
- 数据结构: 插值查找算法
import java.util.Arrays;// 插值查找算法,也要求数组是有序的 public class InsertValueSearch {public static void main( ...
- 查找算法:插值查找算法实现及分析
插值查找算法介绍 插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式key-arr[low]/arr ...
- 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现
目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...
- java常见的查找算法
四种查找算法 1.线性查找 2.二分法查找 3.插值查找 4.斐波那契查找 线性查找 线性查找又称顺序查找,是最简单的查找方法查找,是一种最简单的查找方法.其原理就是循环遍历数组去查找的所要的元素,找 ...
- 【算法】插值查找算法
文章目录 1.概述 2. 插值查找 3.案例说明 4.代码 本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 1.概述 视频地址:哔哩哔哩 在文档:[算法 ...
- java的数组查找算法_java数组、排序算法、查找算法详解
1.为什么定义数组要采用type[] arrayName;这种方式? 因为这种方式具有很好的可读性,使用这种方式很容易就可以理解这是定义一个变量,其中变量名是arrayName,变量的类型是type[ ...
最新文章
- Infragistics NetAdvantage控件的使用:该关系不是此 DataView 指向的表的父关系
- Adobe Acrobat 9.0“ PDFMaker无法找到Adobe PDF Printer 的打印驱动程序”解决办法
- 打开高效文本编辑之门_调用Linux的sed命令
- 他言行不一屡次跳槽,还升职加薪走上了人生巅峰,全数学界都炸了......
- php 错误提示开启,php开启与关闭错误提示,php开启错误提示_PHP教程
- mysql回滚部分记录_MySQL事务部分回滚-回滚到指定保存点
- hadoop 传感器数据_晋城大数据培训
- 基于机器视觉的线圈检测
- 高校表白App-团队冲刺第十天
- 算法:时间、空间复杂度
- ngrok转发mysql连接_使用小米球 -Ngrok 实现内网转发
- 基于MATLAB的PID控制器设计
- NOIP2016普及组T3(海港)题解
- 一次监视雷达行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- Linux图形终端与字符终端
- yarn命令报错Error: The project seems to require yarn but it‘s not installed
- 实现 PV、UV、IP 日统计
- 小学课外拓展计算机活动计划,小学科学课外活动计划及总结
- 学习 Python 之 Pygame 开发魂斗罗(九)
- 软件即服务(saas)_什么是SaaS? 定义软件即服务
热门文章
- BZOJ-1923-外星千足虫-SDOI2010
- 2020-07-03 CVPR2020 i3DV论文讨论(2) 笔记
- oracle简写sql,Oracle通过sqlplus编辑sql命令
- webpack 图片压缩不起作用_理论|webpack2 终极优化
- 解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果
- 关于java的volatile
- 用java实现二分搜索算法分析
- Tomcat无法访问中文路径的解决办法
- tomcat启动时错误:Cannot rename original file to *.tomcat-users.xml.old
- iOS进阶 - iOS如何监控崩溃