Penso che tu voglia usare una routine di ricerca binaria. Una routine di ricerca binaria è
mentre una ricerca lineare è, in media,
.
Ci sono molte varianti per scegliere la forma. Ecco quello che ho trovato in this article:
function binarySearch(items, value){
var startIndex = 0,
stopIndex = items.length - 1,
middle = Math.floor((stopIndex + startIndex)/2);
while(items[middle] != value && startIndex < stopIndex){
//adjust search area
if (value < items[middle]){
stopIndex = middle - 1;
} else if (value > items[middle]){
startIndex = middle + 1;
}
//recalculate middle
middle = Math.floor((stopIndex + startIndex)/2);
}
//make sure it's the right value
return (items[middle] != value) ? -1 : middle;
}
O questo semplice versione guardando da this article che ha una funzione di ricerca binaria in un triliardo di lingue diverse.
function binary_search_iterative(a, value) {
var lo = 0, hi = a.length - 1, mid;
while (lo <= hi) {
mid = Math.floor((lo+hi)/2);
if (a[mid] > value)
hi = mid - 1;
else if (a[mid] < value)
lo = mid + 1;
else
return mid;
}
return null;
}
C'è anche una ricerca binaria in chiusura di Google con il codice here.
E, una buona descrizione di come funziona l'algoritmo di ricerca binaria su Wikipedia.
Sicuramente la strada da percorrere. http://en.wikipedia.org/wiki/Binary_search –
http://www.nczonline.net/blog/2009/09/01/computer-science-in-javascript-binary-search/ – Pete
ok, grazie per il mancia! – frenchie