Day569.插值查找 -数据结构和算法Java

Posted 阿昌喜欢吃黄桃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day569.插值查找 -数据结构和算法Java相关的知识,希望对你有一定的参考价值。

插值查找

1、介绍

类似二分查找,但找对应mid值的时候,采用的是自适应的方案


2、思路分析

3、代码实现

package com.achang.search;

/**
 * @Author Achang
 * @Date 2022/3/26 22:47
 * 插值查找算法
 **/
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;
        

        System.out.println(insertValueSearch(arr, 0, arr.length-1, 55));
    

    /**
     * 插值查找算法,要求数组有序
     * @param arr 待查找数组
     * @param left 左边索引
     * @param right 右边索引
     * @param findValue 查找的值
     * @return 如果找到,返回对应的索引,找不到返回-1;
     */
    public static int insertValueSearch(int[] arr,int left,int right,int findValue)
        if (left > right ||  findValue < arr[0] || findValue > arr[arr.length-1]) return  -1;

        //求出mid,插值查找中自适应mid
        int mid = left + (right - left) * (findValue - arr[left]) / (arr[right] - arr[left]);
        int midValue = arr[mid];
        if (findValue > midValue)
            return insertValueSearch(arr,mid+1,right,findValue);//向右递归
        else if (findValue < midValue)
            return insertValueSearch(arr,left,mid-1,findValue);//向左边递归
        else 
            return mid;
        
    



4、注意点

以上是关于Day569.插值查找 -数据结构和算法Java的主要内容,如果未能解决你的问题,请参考以下文章

将内插值放入 Terraform 查找的最佳方法

快速排序 and 拉格朗日插值查找

查找AVL树散列表

TCPThree_C杯 Day2

拉格朗日插值快速排序

杨氏矩阵查找数字是否存在