插值查找(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;
        }
    }
}
相关文章
|
存储 Java 调度
Java 编译指令集大全
Java 编译指令集大全
191 0
|
监控 Dubbo 安全
JAVA问答8
JAVA问答8
105 0
|
Java
logYF.java
logYF.java
68 0
1086 就不告诉你(JAVA)
做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积。
1086 就不告诉你(JAVA)
1071 小赌怡情(JAVA)
常言道“小赌怡情”。这是一个很简单的小游戏:首先由计算机给出第一个整数;然后玩家下注赌第二个整数将会比第一个数大还是小;玩家下注 t 个筹码后,计算机给出第二个数。若玩家猜对了,则系统奖励玩家 t 个筹码;否则扣除玩家 t 个筹码。
1071 小赌怡情(JAVA)
|
Java
Java一些常见的坑
总是觉得自己Java基础还是不行,需要恶补。今天偶然mark了一本《Java解惑》,其中以端程序的方式罗列了95个即常见又不常见的xian(坑)jing(儿),拿来瞻仰一下。
87 0
|
Java
Java常见的坑(二)
你猜上述程序输出的是什么? 是 ABC easy as 123 吗? 你执行了输出操作,你才发现输出的是 ABC easy as [C@6e8cf4c6 ,这么一串丑陋的数字是什么鬼? 实际上我们知道字符串与任何数值的相加都会变为字符串,上述事例也不例外, numbers输出其实实际上是调用了Object.toString()方法,让numbers转变为'[c' + '@' + 无符号的十六进制数。
45 0
|
Java
爱生活,爱Java
你聪明有人会说你心机重,你靠的是努力有人会说你运气好,你说自己天生乐观有人会说你虚假。 有时候,你明明就是一杯白水,却被人硬生生逼成了满肚子憋屈的碳酸饮料。 人一生要遇见太多人,即使有些话字字诛心,也没必要活在他们的眼神里,只要内心澄明,就永远不用讨好一个不懂你的人。
725 0
|
Java C++
对于Java的认识
1.运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统 Java编译器将 java 源文件编译为 class 字节码文件 Java分为三个体系JavaSE和JavaEE和JavaME,JavaSE是基础,标准版,JavaEE企业版,企业版,主要做大型网站,嵌入式产品,JavaME主要是嵌入式产品,微型版, 2.Java语言是简单的:为什么这么说,它与c和c++相比有哪些优点和长处?1.2.3.4.。
1202 0