插值查找算法

参考二分查找

二分查找是特殊情况下的插值查找算法(我是这么理解的)

后面那一大串公式在二分查找里面就是1/2

 

public class InsertSelect {
    /**
     * 插值查找,查找的也必须是有序数列,基于二分查找
     */
    /**
     * 插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式key-arr[low]/arr[high]-arr[low]。细看是不是key在整序列中的占比哟。所以mid的计算公式为:
     * (high-low)*(key-arr[low])/(arr[high]-arr[low])。对比折半查找的mid = (high-low)/2。
     * @param args
     */
    public static void main(String[] args) {
    int[] array=new int[] {  1,2,3,4,5,6};
    int left =0;
    int right=array.length-1;
    //查找的值
    int searchVal=1;
        System.out.println(select(array,left,right,searchVal));
}
public  static  int select(int[] array,int left,int right,int searchVal){
    /**
     * 防止数组越界
     */
    if (left>right || searchVal<array[0] || searchVal>array[array.length-1]){
        return  -1;
    }
    int mid=left+(right-left)*(searchVal-array[left])/(array[right]-array[left]);
    int midValue=array[mid];
    if(searchVal>midValue){
        return select(array,mid+1,right,searchVal);
    }
    if(searchVal<midValue){
        return select(array,left,mid-1,searchVal);
    }else {
        return  mid;
    }


}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值