【发布时间】:2017-06-09 20:12:17
【问题描述】:
我目前正在尝试使用浮点数实现插值搜索,这是我的代码:
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,但它不起作用。
【问题讨论】: