voraa,
Раз тебя так заинтриговали массивы, может стоит поробовать интерполирующий поиск?
function InterpolationSearch(t,A) // t - искомый элемент,
{ // A - упорядоченный массив, в котором ищем.
var mid, low = 0, high = A.length-1;
while (A[low] < t && A[high] > t)
{ mid = low + Math.floor( ((t-A[low])*(high-low))/(A[high]-A[low]) );
if (A[mid] < t) low = mid+1;
else if (A[mid] > t) high = mid-1;
else return mid;
}
if (A[low] === t) return low; // На выходе индекс искомого элемента.
else if (A[high] === t) return high; // Если искомого элемента нет в массиве, то -1.
else return -1;
}
Интерполирующий поиск похож на то, как мы ищем контакт в адресной книге (бумажной). Например, если нам надо найти Ваню, то наврядли мы будет открывать конец или середину книги (как это делается в бинарном поиске) — мы откроем на первых страницах.
//
P.S. у него скорость тоже низкая по сравнению с Set или Map