下面带来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相关推荐

  1. C语言实现interpolation search插值查找算法(附完整源码)

    interpolation search插值查找算法 interpolation search插值查找算法的完整源码(定义,实现,main函数测试) interpolation search插值查找算 ...

  2. JavaScript实现Interpolation search插值查找算法(附完整源码)

    JavaScript实现Interpolation search插值查找算法(附完整源码) interpolationSearch.js完整源代码 interpolationSearch.test.j ...

  3. 二十二、插值查找算法

    一.插值算法的介绍 1)插值算法原理介绍 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找. 2)将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, ...

  4. 数据结构: 插值查找算法

    import java.util.Arrays;// 插值查找算法,也要求数组是有序的 public class InsertValueSearch {public static void main( ...

  5. 查找算法:插值查找算法实现及分析

    插值查找算法介绍 插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式key-arr[low]/arr ...

  6. 【数据结构与算法】插值查找算法、斐波那契查找算法(黄金分割法)的介绍和程序实现

    目录 1. 插值查找算法 1.1 插值查找算法的介绍 1.2 插值查找算法的程序实现 2. 斐波那契查找算法 2.1 斐波那契查找算法的介绍 2.2 斐波那契查找算法的程序实现 1. 插值查找算法 1 ...

  7. java常见的查找算法

    四种查找算法 1.线性查找 2.二分法查找 3.插值查找 4.斐波那契查找 线性查找 线性查找又称顺序查找,是最简单的查找方法查找,是一种最简单的查找方法.其原理就是循环遍历数组去查找的所要的元素,找 ...

  8. 【算法】插值查找算法

    文章目录 1.概述 2. 插值查找 3.案例说明 4.代码 本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 1.概述 视频地址:哔哩哔哩 在文档:[算法 ...

  9. java的数组查找算法_java数组、排序算法、查找算法详解

    1.为什么定义数组要采用type[] arrayName;这种方式? 因为这种方式具有很好的可读性,使用这种方式很容易就可以理解这是定义一个变量,其中变量名是arrayName,变量的类型是type[ ...

最新文章

  1. Infragistics NetAdvantage控件的使用:该关系不是此 DataView 指向的表的父关系
  2. Adobe Acrobat 9.0“ PDFMaker无法找到Adobe PDF Printer 的打印驱动程序”解决办法
  3. 打开高效文本编辑之门_调用Linux的sed命令
  4. 他言行不一屡次跳槽,还升职加薪走上了人生巅峰,全数学界都炸了......
  5. php 错误提示开启,php开启与关闭错误提示,php开启错误提示_PHP教程
  6. mysql回滚部分记录_MySQL事务部分回滚-回滚到指定保存点
  7. hadoop 传感器数据_晋城大数据培训
  8. 基于机器视觉的线圈检测
  9. 高校表白App-团队冲刺第十天
  10. 算法:时间、空间复杂度
  11. ngrok转发mysql连接_使用小米球 -Ngrok 实现内网转发
  12. 基于MATLAB的PID控制器设计
  13. NOIP2016普及组T3(海港)题解
  14. 一次监视雷达行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  15. Linux图形终端与字符终端
  16. yarn命令报错Error: The project seems to require yarn but it‘s not installed
  17. 实现 PV、UV、IP 日统计
  18. 小学课外拓展计算机活动计划,小学科学课外活动计划及总结
  19. 学习 Python 之 Pygame 开发魂斗罗(九)
  20. 软件即服务(saas)_什么是SaaS? 定义软件即服务

热门文章

  1. BZOJ-1923-外星千足虫-SDOI2010
  2. 2020-07-03 CVPR2020 i3DV论文讨论(2) 笔记
  3. oracle简写sql,Oracle通过sqlplus编辑sql命令
  4. webpack 图片压缩不起作用_理论|webpack2 终极优化
  5. 解惑:如何使用html+css+js实现旋转相册,立方体相册等动画效果
  6. 关于java的volatile
  7. 用java实现二分搜索算法分析
  8. Tomcat无法访问中文路径的解决办法
  9. tomcat启动时错误:Cannot rename original file to *.tomcat-users.xml.old
  10. iOS进阶 - iOS如何监控崩溃