在java中正确实现插值搜索?

时间:2015-10-31 21:22:50

标签: java search interpolation

我必须在我的程序中实现插值搜索,以查看用户输入的值是否是数组的一部分,如果是,它应该返回它所在的数组中的位置。现在当我搜索a时数组中的值只是返回您搜索的向下舍入的数字,并且卡在无限循环中。

public static void  interpolationSearch(double searchValue, double[] array) {
        int lowerBound = 0;
        int upperBound = array.length - 1;
        double dvLowerBound = array[lowerBound];
        double dvUpperBound = array[upperBound];
        int splitPosition;

        while (searchValue >= dvLowerBound && searchValue <= dvUpperBound) {
            splitPosition = (int) (lowerBound + ((searchValue - dvLowerBound) / 
                    (dvUpperBound - dvLowerBound)) * (upperBound - lowerBound));

            if (array[splitPosition] < searchValue) {
                lowerBound = splitPosition + 1;
            } else if (array[splitPosition] > searchValue) {
                upperBound = splitPosition - 1;
            } else 
                System.out.println((int) array[splitPosition]);
        }
    }

1 个答案:

答案 0 :(得分:0)

  

您搜索的数字向下舍入

这是因为您的代码明确地将double强制转换为int

System.out.println((int) array[splitPosition]);
                   ^^^^^
  

并陷入无限循环

您需要在找到号码后停止循环,例如使用break

        if (array[splitPosition] < searchValue) {
            ...
        } else if (array[splitPosition] > searchValue) {
            ...
        } else {
            System.out.println(...);
            break;
        }