Java语言实现插值查找
插值查找
前言
在上篇文章中已经将讲解过二分查找算法,而插值查找与二分查找类似,只不过是在二分查找的基础上进行优化,讲mid的值进行了一定调整优化,将mid的值修改为,该算法时间复杂度为O(log n)。
优缺点
- 优点:对于数据量较大并且关键字分布均匀的查找表来说,采用插值查找速度更加快。
- 关键字分布不均匀的情况下,该方法不一定比二分查找好。
代码实现
/*** 插值查找* 说明:插值查找算法要求数组有序* @param array 数组* @param left 左边的索引* @param right 右边的索引* @param findValue 要查找的值* @return 如果找到返回下标 否则返回-1*/public static int insertValueSearch(int[] array,int left,int right,int findValue){count++;//注意:findValue < array[0] || findValue > array[array.length-1] 不但能起到优化的作用,而且可以防止temp越界if (left > right || findValue < array[0] || findValue > array[array.length-1]){return -1;}int temp = left+(right - left) * (findValue - array[left]) / (array[right] - array[left]);int tempValue = array[temp];if (findValue > tempValue){return insertValueSearch(array, temp+1, right, findValue);}else if (findValue < tempValue){return insertValueSearch(array, left, temp-1, findValue);}else{return temp;}}
测试
public class InsertValueSearch
{//用于记录测试查找次数static int count;public static void main(String[] args){int[] array = new int[100];for (int i = 0; i < array.length; i++) {array[i] = i+1;}int findValue = 78;int index = insertValueSearch(array, 0, array.length - 1, findValue);System.out.printf("要查找的值为%d,在序列表中的索引值为%d",findValue,index);System.out.println("查找次数"+count);}
}
//-----------------------------------------------------测试结果----------------------------------------------------
要查找的值为78,在序列表中的索引值为77
查找次数:1
以上。
如有不足或者错误欢迎评论指正。
Java语言实现插值查找相关推荐
- (二)Java算法:插值查找
目录 一.简介 1.1.特点 二.maven依赖 三.实现 3.1.代码实现 3.2.数据流向过程 3.3.数据查找流程 结语 一.简介 1.1.特点 插值查找,有序表的一种查找方式.插值查找是根 ...
- Java语言实现二分查找(可查询重复数据)
文章目录 二分查找 1.前言 2.算法思想 3.图示 4.优缺点 5.代码实现 标准二分查找 拓展:可以查询重复值 二分查找 1.前言 二分查找是一种查询效率非常高的查找算法,又称为折半查找. 用递归 ...
- 数据结构: 插值查找算法
import java.util.Arrays;// 插值查找算法,也要求数组是有序的 public class InsertValueSearch {public static void main( ...
- Java实现插值查找算法 Insert search
下面带来Java版本插值查找算法的实现,本篇一些概念沿用上一篇博客,如数组左索引为left,右索引为right.先说明一下,插值查找算法要求待查找的数组为有序的. 插值查找原理: 1.插值查找算法类似 ...
- 【Java数据结构与算法】第九章 顺序查找、二分查找、插值查找和斐波那契查找
第九章 顺序查找.二分查找.插值查找和斐波那契查找 文章目录 第九章 顺序查找.二分查找.插值查找和斐波那契查找 一.顺序查找 1.基本介绍 2.代码实现 二.二分查找 1.基本介绍 2.代码实现 三 ...
- java语言实现常用算法(排序和查找)
以下是java语言实现的常用算法. 1.冒泡排序 /** 冒泡排序* * 有1至N个数* 第一轮比较N个数,第二轮比较N-1个数,...* 每一轮根据前面一个数和后面一个数比较,如果前者大于后者,交换 ...
- Java数据结构与算法——线性查找 二分查找 插值查找
1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...
- 面向对象程序设计——Java语言 第3周编程题 查找里程(10分)
面向对象程序设计--Java语言 第3周编程题 查找里程(10分) 题目内容 下图为国内主要城市之间的公路里程: 你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程. ...
- C语言实现interpolation search插值查找算法(附完整源码)
interpolation search插值查找算法 interpolation search插值查找算法的完整源码(定义,实现,main函数测试) interpolation search插值查找算 ...
最新文章
- [转]linux下fms2流媒体服务器搭建之五-----flv播放器制作篇
- python uvloop异步框架简介
- eclipse导入github项目提示没有发现项目_eclipse clone克隆github远程库工程到本地
- bzoj2957:楼房重建
- 博客文章列表(一)——JAVA
- linux下将多个文件去除文件头合并_命令行生存指南:拆分与合并 | Linux 中国
- dd实现Linux转移,linux命令-dd {拷贝并替换}
- The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method
- 让程序员过年回家包压岁钱不心痛的好办法|v3.11.0上线!
- C字符串指针遇到的问题
- php 安装swoole扩展
- VBS病毒(爱虫病毒) 源代码
- nvidia怎么查看
- 用c语言编写打印机输出程序,C语言编写银行打印程序实例参考
- 递归回溯--数字分解java代码
- 2013年6月2日星期日
- 第二本第七章 Linux无人值守安装脚本kickstart
- 机器人编程是用计算机编吗,茌平计算机编程,无论是选择机器人编程还是电脑编程。...
- Cadence Allegro snap pick to选择捕获功能图文教程及视频演示
- 多种方式解决兔子繁殖问题
热门文章
- python 字符串去除中文
- 8. Leetcode 26. 删除有序数组中的重复项 (数组-同向双指针-快慢指针)
- Python应用实战系列-如何通过Python来操作Oracle数据库:cx_Oracle
- 深度学习核心技术精讲100篇(四十九)-半监督学习在金融文本分类上的探索和实践
- TSP问题遗传算法通用Matlab程序
- python实现自动发送微博,当自己写博客时同步上去。
- Python入门100题 | 第061题
- Pytorch运行时报错No module named ‘matplotlib‘--解决办法
- Python编程基础:第四十七节 抽象类Abstract Classes
- numpy.zeros详解