@aegenet/belt-binary-search
Version:
Binary search
24 lines (23 loc) • 737 B
JavaScript
function r(f, t, e, u = 0, l = f.length) {
const n = Math.floor(u + (l - u) / 2), i = e(f[n], t);
return i !== 0 && (n === 0 || n === f.length - 1) ? null : i > 0 ? n === l ? null : r(f, t, e, u, n) : i < 0 ? n === u ? null : r(f, t, e, n, l) : {
value: f[n],
index: n
};
}
function o(f, t, e) {
if (!e)
if (typeof t == "string")
e = (l, n) => l.localeCompare(n);
else if (typeof t == "number" || typeof t == "bigint")
e = (l, n) => l - n;
else
throw new Error("Invalid usage: you must specify a comparator if your searchValue is an object.");
const u = f.slice(0).sort(e);
return r(u, t, e);
}
export {
r as binarySearch,
o as safeBinarySearch
};
//# sourceMappingURL=index.mjs.map