/**
*
* The algorithm consists of two stages. The first stage determines a
* range in which the search key would reside if it were in the list.
* In the second stage, a binary search is performed on this range.
*
*
*
*/
function binarySearch (arr, value, floor, ceiling) {
// Middle index
const mid = Math.