我目前正在尝试使用 float 实现插值搜索,这是我的代码:
import java.util.Arrays;
class InterpolationSearch {
private static float comparisions = 0;
public static int interpolationsearch (double arr[], double x, int high, int low) {
while ( low<=high) {
comparisions++;
int i = low + (x-arr[low])*(high-low)/(arr[high]-arr[low]);
if (x==arr[i])
return i;
else if (x<arr[i])
high = i-1;
else
low = i+1;
}
return -1;
}
public static void main(String args[]) {
int n=100;
double array[] = new double[n];
for (int i=0; i<100; i++) {
for (int k=0; k<n; k++) {
double r = Math.random();
r = r * 100;
r = Math.round(r);
r = r / 100;
array[k] = r;
}
Arrays.sort(array);
double search = Math.random();
search = search*100;
search = Math.round(search);
search = search/100;
int result=interpolationsearch(array, search, n-1, 0);
if (result == -1)
System.out.println(search +" befindet sich nicht im Array.");
else
System.out.println(search+" befindet sich im Array an der Stelle "+(result)+".");
}
System.out.println("Anzahl der gemittelten Vergleiche: "+comparisions/100+".");
}
}
首先我的算法是否正确?其次,我如何使用 float 来实现这一点?在当前代码中,我在第 8 行收到以下错误:类型不匹配:无法从 double 转换为 int。我已经尝试将所有内容都转换为 int,但没有成功。
最佳答案
第二个答案的类型转换正确。
int i = (int)(low + (x-arr[low])*(high-low)/(arr[high]-arr[low]));
现在你的程序给出以下输出
0.47 befindet sich im Array an der Stelle 41.
0.33 befindet sich im Array an der Stelle 32.
1.0 befindet sich im Array an der Stelle 99.
0.52 befindet sich im Array an der Stelle 54.
0.51 befindet sich im Array an der Stelle 48.
0.32 befindet sich im Array an der Stelle 25.
现在您必须详细说明您想要实现的目标。这是正确的输出吗?
关于带有 float 的Java插值搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44466002/