forked from knaxus/problem-solving-javascript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
40 lines (35 loc) · 850 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* Note: Array must be sorted for binary search
*/
function binarySearch(arr, key) {
let low = 0;
let high = arr.length - 1;
while (low <= high) {
let mid = Math.floor((low + high) / 2);
if (key < arr[mid]) {
high = mid - 1;
} else if (key > arr[mid]) {
low = mid + 1;
} else {
// return the key
return mid;
}
}
return null;
}
function binarySearchRecursive(arr, low, high, key) {
const mid = Math.floor((high - low) / 2 + low);
if (high <= low && arr[mid] !== key) {
return null;
} else if (key === arr[mid]) {
return mid;
} else if (key < arr[mid]) {
return binarySearchRecursive(arr, low, mid - 1, key);
} else if (key > arr[mid]) {
return binarySearchRecursive(arr, mid + 1, high, key);
}
}
module.exports = {
binarySearch,
binarySearchRecursive,
};