插值查找-四大查找算法(三)

思路说明:

1.插值查找算法和二分查找很像,不同的二分查找每次比较的是中间值,而插值插值算法每次比较的是Insert值 比中间值更接近于要找的s值
2.insert推导公式如下
Mid=(left+right)/2=left+(right-left)/2 根据数学公式推导出
Insert=left+(s-a[left])*(right-left)/(a[right]-a[left])

先写一个方法

 public static int insertSearch(int arr[],int s,int left,int right)
    {
        if (left > right || s > arr[right] || s < arr[left]) {
            return -1;
        }
        int insert=left+(s-arr[left])*(right-left)/(arr[right]-arr[left]);
        if (s<arr[insert]){
            return insertSearch(arr, s, left, insert-1);
        }
        else if (s>arr[insert]){
            return insertSearch(arr, s, insert+1, right);
        }
        else{
            return insert;
        }

    }
}

然后测试

   public static void main(String[] args) {
        int arr[]={1,2,4,5,7,8,9};
        int r = insertSearch(arr, 9, 0, arr.length - 1);
        System.out.println(r);
    }

这是结果图

在这里插入图片描述
tips:在数组较为有序的时候 插值查找的效率比二分查找高得多,假如数组数值不是很连续有时候还不如二分查找的效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值