@figliolia/data-structures
Version:
Efficient data structures for every day programming
34 lines (33 loc) • 736 B
JavaScript
export function binarySearch(list, target, extractor) {
let l = 0;
let r = list.length - 1;
let targetValue;
if (typeof target === "number") {
targetValue = target;
}
else {
targetValue = extractor(target);
}
while (l <= r) {
const p = (l + r) >>> 1;
const mid = list[p];
let comparer;
if (typeof mid === "number") {
comparer = mid;
}
else {
comparer = extractor(mid);
}
const diff = targetValue - comparer;
if (diff === 0) {
return true;
}
if (diff < 0) {
r = p - 1;
}
else {
l = p + 1;
}
}
return false;
}