插值查找算法Java实现

1-插值查找

插值查找算法是对二分查找的升级做法,具体做法是
二分查找与插值查找:
在这里插入图片描述
修改了计算mid中间索引的公式

2-插值查找的Java实现

package select;

/**
 * 插值查找
 */
public class InsertValueSearch {
    public static void main(String[] args) {

        int arr[] = {1, 8, 10, 89, 1000, 1000, 1234};
        int i = insertValueSearch(arr, 1000, 0, arr.length - 1);
        System.out.println("找到了,元素下标为:"+ i);
    }
    
    // || 代表或
    public static int insertValueSearch(int[] arr, int keyValue, int left, int right) {

        /**
         * 三个条件有一个为真则跳出循环:
         * 1.keyValue大于最大值
         * 2.keyValue小于最小值
         * 3.左索引大于右索引
         */
        if (keyValue > arr[arr.length - 1] || keyValue < arr[0] || left > right) {
            return -1;
        }
        // 原始mid计算方法:mid = (left + right) / 2;
        // 修改mid计算方法
        int mid = left + (keyValue - arr[left]) * (right - left) / (arr[right] - arr[left]);
        if (keyValue > arr[mid]) {
            return insertValueSearch(arr, keyValue, mid + 1, right); // 如果右边大,向右递归
        } else if (keyValue < arr[mid]) {
            return insertValueSearch(arr, keyValue, left, mid - 1);
        }
        return mid;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值