algorithmpool
Version:
A pool of algorithms and data-structures for geeks
30 lines (28 loc) • 951 B
JavaScript
import {
Compare,
defaultCompare,
DOES_NOT_EXIST
} from '../../utils/util';
import {
quickSort
} from '../sort/quickSort';
function binarySearchRecursive(array, value, low, high, compareFn = defaultCompare) {
if (low <= high) {
const mid = Math.floor((low + high) / 2);
const element = array[mid];
if (compareFn(element, value) === Compare.LESS_THAN) {
return binarySearchRecursive(array, value, mid + 1, high, compareFn);
}
if (compareFn(element, value) === Compare.BIGGER_THAN) {
return binarySearchRecursive(array, value, low, mid - 1, compareFn);
}
return mid;
}
return DOES_NOT_EXIST;
}
export const binarySearch = (array, value, compareFn = defaultCompare) => {
const sortedArray = quickSort(array);
const low = 0;
const high = sortedArray.length - 1;
return binarySearchRecursive(array, value, low, high, compareFn);
}