Ich habe ein Buch über Algorithmen gelesen, das den folgenden Algorithmus für die binäre Suche enthielt:
public class BinSearch {
static int search ( int [ ] A, int K ) {
int l = 0 ;
int u = A. length 1;
int m;
while (l <= u ) {
m = (l+u) /2;
if (A[m] < K) {
l = m + 1 ;
} else if (A[m] == K) {
return m;
} else {
u = m1;
}
}
return 1;
}
}
Der Autor sagt: "Der Fehler liegt in der Zuordnung m = (l+u)/2;
kann es zu einem Überlaufen kommen und sollte ersetzt werden durch m = l + (u-l)/2
."
Ich kann mir nicht vorstellen, wie das zu einem Überlauf führen soll. Wenn ich den Algorithmus in meinem Kopf für ein paar verschiedene Eingaben laufen lasse, sehe ich nicht, dass der Wert der Mitte aus dem Array-Index herausgeht.
In welchen Fällen würde der Überlauf also auftreten?