UNPKG

@extra-array/bsearch-right

Version:

Binary searches rightmost value in sorted array.

46 lines (41 loc) 980 B
'use strict'; /** * Gives same value. * @param v a value * @returns v */ function id(v) { return v; } /** * Compares two values. * @param a a value * @param b another value * @returns a<b: -1, a=b: 0, a>b: 1 */ function cmp(a, b) { return a < b ? -1 : (a > b ? 1 : 0); } /** * Binary searches rightmost value in sorted array. * @param x an array (sorted) * @param v search value * @param fc compare function (a, b) * @param fm map function (v, i, x) * @returns last index of value | ~(index of closest value) */ function bsearchRight(x, v, fc = null, fm = null) { var fc = fc || cmp, fm = fm || id; var v1 = fm(v, 0, null); for (var i = 0, I = x.length; i < I;) { var m = i + I >>> 1; var u1 = fm(x[m], m, x); var c = fc(u1, v1); if (c <= 0) i = m + 1; else I = m; } return i <= 0 || fc(fm(x[i - 1], i - 1, x), v1) !== 0 ? ~i : i - 1; } module.exports = bsearchRight;