Skip to content

Commit

Permalink
(misc): converting binary search to typescript (#2129)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelcunningham19 authored and johnBartos committed Feb 13, 2019
1 parent 3ff8eb2 commit 52bc8fb
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 41 deletions.
41 changes: 0 additions & 41 deletions src/utils/binary-search.js

This file was deleted.

44 changes: 44 additions & 0 deletions src/utils/binary-search.ts
@@ -0,0 +1,44 @@
type BinarySearchComparison < T > = (candidate: T) => -1 | 0 | 1;

const BinarySearch = {

/**
* Searches for an item in an array which matches a certain condition.
* This requires the condition to only match one item in the array,
* and for the array to be ordered.
*
* @param {Array<T>} list The array to search.
* @param {BinarySearchComparison<T>} comparisonFn
* Called and provided a candidate item as the first argument.
* Should return:
* > -1 if the item should be located at a lower index than the provided item.
* > 1 if the item should be located at a higher index than the provided item.
* > 0 if the item is the item you're looking for.
*
* @return {T | null} The object if it is found or null otherwise.
*/
search: function<T> (list: T[], comparisonFn: BinarySearchComparison<T>): T | null {
let minIndex: number = 0;
let maxIndex: number = list.length - 1;
let currentIndex: number | null = null;
let currentElement: T | null = null;

while (minIndex <= maxIndex) {
currentIndex = (minIndex + maxIndex) / 2 | 0;
currentElement = list[currentIndex];

let comparisonResult = comparisonFn(currentElement);
if (comparisonResult > 0) {
minIndex = currentIndex + 1;
} else if (comparisonResult < 0) {
maxIndex = currentIndex - 1;
} else {
return currentElement;
}
}

return null;
}
};

export default BinarySearch;

0 comments on commit 52bc8fb

Please sign in to comment.