我目前想实现插值搜索与浮点数,这里是我的代码:Java的插值与搜索浮点数
所有的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+".");
}
}
首先是我的算法是否正确?其次,我如何使用浮点数来处理这个问题?在当前代码中,第8行出现以下错误:类型不匹配:无法从double转换为int。我已经试图将所有内容都转换为int,但它不起作用。
这正是我所做的,但它根本不起作用。它适用于2个循环,然后程序无故停止工作,所以这不应该是最好的解决方案,即使它理论上应该可行......问题是为什么它对你有用,但对我来说不是?输出似乎是正确的,是的。 – Vajk