插值查找(java)

简介: 插值查找(java)

适用于有序序列分布比较均匀数据。

 
import java.util.Arrays;
 
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;
        }
        System.out.println(Arrays.toString(arr));
        System.out.println(insertValueSearch(arr, 0, arr.length - 1, 1));
        System.out.println(insertValueSearch(arr, 0, arr.length - 1, 99));
        System.out.println(insertValueSearch(arr, 0, arr.length - 1, 25));
    }
 
    /**
     * 插值查找算法,使用有序序列,分布比较均匀
     *
     * @param arr     数组
     * @param left    左下标
     * @param right   右下标
     * @param findVal 查找的值
     * @return
     */
    public static int insertValueSearch(int[] arr, int left, int right, int findVal) {   
        if (left > right || findVal > arr[arr.length - 1] || findVal < arr[0]) {
            return -1;
        }
        //    求出mid
        int mid = left + (right - left) * (findVal - arr[left]) / (arr[right] - arr[left]);
        int midVal = arr[mid];
        if (findVal > midVal) {
            //向右递归
            return insertValueSearch(arr, mid + 1, right, findVal);
        } else if (findVal < midVal) {
            //向左递归
            return insertValueSearch(arr, left, mid - 1, findVal);
        } else {
            return mid;
        }
    }
}
相关文章
|
4月前
|
Java
java
re是java运行时的环境,包含jvm和运行时所需要的类库 jdk是java开的程序包,包含jre和开发人员使用的工具 jvm就是我们常说的java虚拟机,他是整个java实现跨平台的最核心 的部分,所有的java程序会首先被编译为.class的类文件,这种类文 件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统 相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释 给本地系统执行。 只有jvm还不能成class的执行,因为再解释class的时候jvm需要调用 解释所需要的类库lib,而jre包含lib类库。jvm屏蔽了与具体操作系 统平台相关的信息,使得java程
30 1
|
11月前
|
人工智能 前端开发 Java
Java真过饱和了吗?现在学Java迟了?
Java真过饱和了吗?现在学Java迟了?
98 0
|
4月前
|
存储 算法 Java
认识java
认识java
29 0
|
4月前
|
机器学习/深度学习 Java
L1-6 福到了(Java)
L1-6 福到了(Java)
57 0
|
12月前
|
Java
java if
if (condition) { // 如果条件为真,执行这里的代码 } else { // 如果条件为假,执行这里的代码 }
40 0
|
Java Unix Linux
JAVA|什么是Sdkman
JAVA|什么是Sdkman
401 0
|
分布式计算 Java API
赶快看看Java11,不然你就out了!
由于直接从Java8跨越到Java11,所以特性介绍就把Java9-Java11的部分特性一起介绍一下。想要了解Java8特性的朋友可以去我的博客找「Java8系列」。
643 3
赶快看看Java11,不然你就out了!
|
Java
Java一些常见的坑
总是觉得自己Java基础还是不行,需要恶补。今天偶然mark了一本《Java解惑》,其中以端程序的方式罗列了95个即常见又不常见的xian(坑)jing(儿),拿来瞻仰一下。
105 0
1096 大美数(JAVA)
若正整数 N 可以整除它的 4 个不同正因数之和,则称这样的正整数为“大美数”。本题就要求你判断任一给定的正整数是否是“大美数”。
1096 大美数(JAVA)
|
Java
java14-java命名规范
java14-java命名规范
113 0