Часто удобно возвращать индекс найденного элемента из отсортированного списка. Необязательный второй параметр определяет, будет ли возвращено логическое значение или индекс.
Array.prototype.biSearch= function(v, ret){
var L= this.length, i= -1, m;
while(L - i> 1){
if(this[m= L + i>> 1]< v) i= m;
else L= m;
}
if(ret) return this[L]== v? L: -1;
return this[L]== v;
}
Практически один и тот же код можно использовать для другой общей задачи - добавления элемента в отсортированный массив без необходимости повторной сортировки всего массива.
Если второй параметр не отправлен, элемент будет вставлен, только если он еще не существует в массиве.
Array.prototype.addtoSort= function(v, dup){
var L= this.length, i= -1, m;
while(L - i> 1){
if(this[m= L + i>> 1]< v) i= m;
else L= m;
}
if(this[L]!= v || dup){
return this.splice(L,0,v);
}
return this.length;
}