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[ ...
最新文章
- iOS底层原理 - 常驻线程
- C++中vector的capacity和size的区别
- PyTorch深度学习实践
- xmx java_为什么我的Java进程比Xmx消耗更多的内存?
- mysql8中怎么增删一列_MYSQL 第八课 数据的增删改
- [计算机视觉][神经网络与深度学习]Faster R-CNN配置及其训练教程2
- 一个U盘走天下,装机大神撩妹的不二之选
- [转载] python __import__ 搜索路径详解
- html 时钟怎样居中,怎么用css3做时钟刻度
- php 爬网页数据 入库,phpspider是一个基于QueryList3的数据PHP爬虫,页面深度爬取,超简单的使用...
- 使用 Bitmap Style Designer 为FMX修改已有样式
- 12306抢票软件实现(二)
- Unity3d 传送门效果制作
- 【Python】占位符格式化输出
- buck dcm占空比计算_buck电路输出电容及其他参数计算
- Linux 编译找不到头文件
- rabbitMQ-server控制台安装报错启动失败,黑窗口一闪即过Applying plugin configuration to rabbit .. failed.
- java生成word 可变表格_【java】Freemarker 动态生成word(带图片表格)
- hmc如何进入aix系统_HMC配置及操作
- JVM性能调优6_深入了解性能优化__享学课堂
热门文章
- 线段树(假)练习题一(学校OJ的题)
- sketchup 图片转模型_你应该知道的那些 Sketchup 实用快捷键和使用技巧!
- 给指定服务器加路由,无线路由器如何给终端分配指定的IP地址?
- 什么端口可以抓LINUX,linux下抓包工具
- JavaScript 数组拼接打印_巧用控制台,提升JavaScript调试性能
- GDB调试汇编堆栈过程分析
- [swustoj 856] Huge Tree
- 通过结构体某个成员的地址计算结构体首地址 (转)
- 桌面图标有阴影怎么去掉
- 使用Lambda表达式重构委托