插值查找

插值查找

  1. 插值查找原理介绍: 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。
  2. 将折半查找中的求 mid 索引的公式 ,low 表示左边索引 left,high 表示右边索引 right. key 就是上一篇的findVal
  3. intmid=low+(high-low)(key-arr[low])/(arr[high]-arr[low]) ;/插值索引/
    对应前面的代码公式: intmid=left+(right – left)
    (findVal – arr[left])/(arr[right] – arr[left])
    在这里插入图片描述
    注意该算法也需要是有序数组才能查找
    具体实现如下:
//插值查找法
    public static int insertValueSerach(int[] arr, int left, int right, int findvalue) {
        //如果left>right说明已经查找完毕,如果不加后面两个条件可能会越界
        if (left > right || findvalue < arr[0] || findvalue > arr[arr.length - 1]) {
            return -1;
        }
        //根据插值查找的公式
        int mid = left + (right - left) * (findvalue - arr[left]) / (arr[right] - arr[left]);
        //记录中值的数据
        int midval = arr[mid];
        //如果大于中间的值,向右递归查找
        if (findvalue > midval) {
            return insertValueSerach(arr, mid + 1, right, findvalue);
        //如果小于 中间的值,向左边递归查找
        } else if (findvalue < midval) {
            return insertValueSerach(arr, left, mid - 1, findvalue);
        } else {
            //如果等于中间的值,直接返回
            return mid;
        }
    }

在这里插入图片描述

posted @ 2020-10-26 20:40  Latteitcjz  阅读(68)  评论(0)    收藏  举报