下面带来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. iOS底层原理 - 常驻线程
  2. C++中vector的capacity和size的区别
  3. PyTorch深度学习实践
  4. xmx java_为什么我的Java进程比Xmx消耗更多的内存?
  5. mysql8中怎么增删一列_MYSQL 第八课 数据的增删改
  6. [计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2
  7. 一个U盘走天下,装机大神撩妹的不二之选
  8. [转载] python __import__ 搜索路径详解
  9. html 时钟怎样居中,怎么用css3做时钟刻度
  10. php 爬网页数据 入库,phpspider是一个基于QueryList3的数据PHP爬虫,页面深度爬取,超简单的使用...
  11. 使用 Bitmap Style Designer 为FMX修改已有样式
  12. 12306抢票软件实现(二)
  13. Unity3d 传送门效果制作
  14. 【Python】占位符格式化输出
  15. buck dcm占空比计算_buck电路输出电容及其他参数计算
  16. Linux 编译找不到头文件
  17. rabbitMQ-server控制台安装报错启动失败,黑窗口一闪即过Applying plugin configuration to rabbit .. failed.
  18. java生成word 可变表格_【java】Freemarker 动态生成word(带图片表格)
  19. hmc如何进入aix系统_HMC配置及操作
  20. JVM性能调优6_深入了解性能优化__享学课堂

热门文章

  1. 线段树(假)练习题一(学校OJ的题)
  2. sketchup 图片转模型_你应该知道的那些 Sketchup 实用快捷键和使用技巧!
  3. 给指定服务器加路由,无线路由器如何给终端分配指定的IP地址?
  4. 什么端口可以抓LINUX,linux下抓包工具
  5. JavaScript 数组拼接打印_巧用控制台,提升JavaScript调试性能
  6. GDB调试汇编堆栈过程分析
  7. [swustoj 856] Huge Tree
  8. 通过结构体某个成员的地址计算结构体首地址 (转)
  9. 桌面图标有阴影怎么去掉
  10. 使用Lambda表达式重构委托