function binarySearch2(length, compareToKey) {
    let low = 0, high = length - 1;
    while (low <= high) {
        const mid = ((low + high) / 2) | 0;
        const comp = compareToKey(mid);
        if (comp < 0) {
            low = mid + 1;
        }
        else if (comp > 0) {
            high = mid - 1;
        }
        else {
            return mid;
        }
    }
    return -(low + 1);
}
Performs a binary search algorithm over a sorted collection. Useful for cases
when we need to perform a binary search over something that isn't actually an
array, and converting data to an array would defeat the use of binary search
in the first place.

@param length The collection length.
@param compareToKey A function that takes an index of an element in the
  collection and returns zero if the value at this index is equal to the
  search key, a negative number if the value precedes the search key in the
  sorting order, or a positive number if the search key precedes the value.
@return A non-negative index of an element, if found. If not found, the
  result is -(n+1) (or ~n, using bitwise notation), where n is the index
  where the key should be inserted to maintain the sorting order.