我必须在我的程序中实现插值搜索,以查看用户输入的值是否是数组的一部分,如果是,它应该返回它所在的数组中的位置。现在当我搜索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]);
}
}
答案 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;
}