La ricerca binaria può essere implementata in molti modi: ricorsiva, iterativa, condizionale, ecc. Ho preso questo dal libro di Bentley "Perle di programmazione: scrittura di programmi corretti "che è un'implementazione iterativa e che include un bug.Correzione del bug di ricerca binaria dal libro di Bentley (programmazione di perle: scrittura di programmi corretti)
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 = m-1;
}
}
return -1;
}
}
Ho trovato un errore nella riga m = (l + u)/2; può portare a overflow. Come possiamo evitare questo overflow in questa ricerca binaria?
Non dovrebbe essere "while (l <= U)' be "while (l <= u)'? – Machtl
l'ho preso dal libro ... programmare perle: scrivere programmi corretti. –
'U' sarà un identificatore sconosciuto e' u' ha molto più senso. Non hai provato a compilarlo? – Machtl