Creo que le gustaría usar una rutina de búsqueda binaria. Una rutina de búsqueda binaria es mientras que una búsqueda lineal es, en promedio, .
Hay muchas variaciones para elegir la forma. Aquí hay uno que encontré en 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 esta versión más simple mirando desde this article que tiene una función de búsqueda binaria en un trillón de diferentes idiomas.
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;
}
También hay una búsqueda binaria en el cierre de Google con el código here.
Y, una buena descripción de cómo funciona el algoritmo de búsqueda binaria en Wikipedia.
Definitivamente el camino a seguir. http://en.wikipedia.org/wiki/Binary_search –
http://www.nczonline.net/blog/2009/09/01/computer-science-in-javascript-binary-search/ – Pete
bien, gracias por el ¡propina! – frenchie