interpolation-search-algorithm

插值查找算法

/**
 * @Author: Wizard
 * @Date: 2020/6/17 9:06
 */
public class insertSearch {
    /**
     * @param arr     数组
     * @param left    左边的索引
     * @param right   右边的索引
     * @param findVal 要查找的值
     * @return
     */
    public static int insertValue(int[] arr, int left, int right, int findVal) {
        System.out.println("插值查找次数...");

        //注意:findVal<arr[0]和findVal>arr[arr.length-1]必须需要
        //否则得到的mid可能越界
        if (left > right || findVal < arr[0] || findVal > arr[arr.length - 1]) {
            return -1;
        }

        //求出mid,自适应
        int mid = left + (right - left) * (findVal - arr[left] / arr[right] - arr[left]);
        int midVal = arr[mid];
        if (findVal > midVal) {
            //应该向右递归
            return insertValue(arr, mid + 1, right, findVal);
        } else if (findVal < midVal) {
            return insertValue(arr, left, mid - 1, findVal);
        } else {
            return mid;
        }
    }
}
Licensed under CC BY-NC-SA 4.0
Last updated on Mar 23, 2024 06:11 UTC
让过去的过去,给时间点时间
Built with Hugo
Theme Stack designed by Jimmy