插值查找(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;
        }
    }
}
相关文章
|
开发框架 Oracle 算法
初识Java
大家好!我是保护小周ღ,本期为大家带来的是初始 Java,主要给大家带来,Java的简介:Java是什么、Java的热度、Java 的就业等,怎样使用 IEDA 集成开发环境新建项目,并打印Hello World!   Java 的main 方法,以及java 文件是怎样运行的。
162 0
|
分布式计算 安全 Java
A First Look At Java
A First Look At Java
136 0
A First Look At Java
|
存储 负载均衡 监控
JAVA问答4
JAVA问答4
135 0
|
Java
Java一些常见的坑
总是觉得自己Java基础还是不行,需要恶补。今天偶然mark了一本《Java解惑》,其中以端程序的方式罗列了95个即常见又不常见的xian(坑)jing(儿),拿来瞻仰一下。
93 0
|
小程序 Oracle Java
Java小史:从0到1
简单介绍下java的历史
200 0
Java小史:从0到1
|
Android开发
java34-巩固练习
java34-巩固练习
97 0
java34-巩固练习
|
Java
Java - 9 个小技巧让你的 if else 看起来更优雅(四)
Java - 9 个小技巧让你的 if else 看起来更优雅(四)
111 0
|
Java 应用服务中间件 数据库连接
java导读
导读:      我们学习Java大概有3个方向,第一,桌面系统,包括C/S结构;第二,J2ME,面向无限领域,很有潜力的家伙,看看中国的手机用户就知道了。第三,面向企业应用、计算的平台,J2EE.      初次涉及Java领域,感觉到Java入门是好像没有C,C++入门快,工具也没有什么Turbo C,Visual C++好用(自己的破机器实在陪不起JBuilder,贪婪的家伙,以后一定要收拾她)。
1268 0
|
Java
爱生活,爱Java
你聪明有人会说你心机重,你靠的是努力有人会说你运气好,你说自己天生乐观有人会说你虚假。 有时候,你明明就是一杯白水,却被人硬生生逼成了满肚子憋屈的碳酸饮料。 人一生要遇见太多人,即使有些话字字诛心,也没必要活在他们的眼神里,只要内心澄明,就永远不用讨好一个不懂你的人。
724 0
下一篇
无影云桌面