插值查找

前言

在上篇文章中已经将讲解过二分查找算法,而插值查找与二分查找类似,只不过是在二分查找的基础上进行优化,讲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语言实现插值查找相关推荐

  1. (二)Java算法:插值查找

    目录 一.简介 1.1.特点 二.maven依赖 三.实现 3.1.代码实现 3.2.数据流向过程 3.3.数据查找流程 结语 一.简介 1.1.特点   插值查找,有序表的一种查找方式.插值查找是根 ...

  2. Java语言实现二分查找(可查询重复数据)

    文章目录 二分查找 1.前言 2.算法思想 3.图示 4.优缺点 5.代码实现 标准二分查找 拓展:可以查询重复值 二分查找 1.前言 二分查找是一种查询效率非常高的查找算法,又称为折半查找. 用递归 ...

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

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

  4. Java实现插值查找算法 Insert search

    下面带来Java版本插值查找算法的实现,本篇一些概念沿用上一篇博客,如数组左索引为left,右索引为right.先说明一下,插值查找算法要求待查找的数组为有序的. 插值查找原理: 1.插值查找算法类似 ...

  5. 【Java数据结构与算法】第九章 顺序查找、二分查找、插值查找和斐波那契查找

    第九章 顺序查找.二分查找.插值查找和斐波那契查找 文章目录 第九章 顺序查找.二分查找.插值查找和斐波那契查找 一.顺序查找 1.基本介绍 2.代码实现 二.二分查找 1.基本介绍 2.代码实现 三 ...

  6. java语言实现常用算法(排序和查找)

    以下是java语言实现的常用算法. 1.冒泡排序 /** 冒泡排序* * 有1至N个数* 第一轮比较N个数,第二轮比较N-1个数,...* 每一轮根据前面一个数和后面一个数比较,如果前者大于后者,交换 ...

  7. Java数据结构与算法——线性查找 二分查找 插值查找

    1.线性查找 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称[顺序查找] 要求: 如果找到了,就提示找到,并给出下标值. package com.szh. ...

  8. 面向对象程序设计——Java语言 第3周编程题 查找里程(10分)

    面向对象程序设计--Java语言 第3周编程题 查找里程(10分) 题目内容 下图为国内主要城市之间的公路里程: 你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程. ...

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

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

最新文章

  1. [转]linux下fms2流媒体服务器搭建之五-----flv播放器制作篇
  2. python uvloop异步框架简介
  3. eclipse导入github项目提示没有发现项目_eclipse clone克隆github远程库工程到本地
  4. bzoj2957:楼房重建
  5. 博客文章列表(一)——JAVA
  6. linux下将多个文件去除文件头合并_命令行生存指南:拆分与合并 | Linux 中国
  7. dd实现Linux转移,linux命令-dd {拷贝并替换}
  8. The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method
  9. 让程序员过年回家包压岁钱不心痛的好办法|v3.11.0上线!
  10. C字符串指针遇到的问题
  11. php 安装swoole扩展
  12. VBS病毒(爱虫病毒) 源代码
  13. nvidia怎么查看
  14. 用c语言编写打印机输出程序,C语言编写银行打印程序实例参考
  15. 递归回溯--数字分解java代码
  16. 2013年6月2日星期日
  17. 第二本第七章 Linux无人值守安装脚本kickstart
  18. 机器人编程是用计算机编吗,茌平计算机编程,无论是选择机器人编程还是电脑编程。...
  19. Cadence Allegro snap pick to选择捕获功能图文教程及视频演示
  20. 多种方式解决兔子繁殖问题

热门文章

  1. python 字符串去除中文
  2. 8. Leetcode 26. 删除有序数组中的重复项 (数组-同向双指针-快慢指针)
  3. Python应用实战系列-如何通过Python来操作Oracle数据库:cx_Oracle
  4. 深度学习核心技术精讲100篇(四十九)-半监督学习在金融文本分类上的探索和实践
  5. TSP问题遗传算法通用Matlab程序
  6. python实现自动发送微博,当自己写博客时同步上去。
  7. Python入门100题 | 第061题
  8. Pytorch运行时报错No module named ‘matplotlib‘--解决办法
  9. Python编程基础:第四十七节 抽象类Abstract Classes
  10. numpy.zeros详解