ich derzeit versuche Interpolationssuche mit Gleitkommazahlen zu implementieren, hier ist mein Code:Java Interpolationssuche mit Gleitkommazahlen
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+".");
}
}
Zunächst einmal ist mein Algorithmus korrekt? Zweitens, wie bekomme ich das mit Floating-Zahlen arbeiten? In dem aktuellen Code erhalte ich den folgenden Fehler in Zeile 8: Typenkonflikt: kann nicht von Double in Int konvertieren. Ich habe bereits versucht, alles auf int zu übertragen, aber es hat nicht funktioniert.
Das ist genau das, was ich gemacht habe, aber es funktioniert überhaupt nicht. Es funktioniert wie 2 Schleifen und dann hört das Programm auf, ohne Grund zu arbeiten, also sollte dies nicht die beste Lösung sein, obwohl es theoretisch funktionieren sollte ... Die Frage ist, warum funktioniert es für dich, aber nicht für mich? Die Ausgabe scheint korrekt zu sein, ja. – Vajk