23 lines
426 B
TypeScript
23 lines
426 B
TypeScript
|
export function binarySearch(
|
||
|
min: number,
|
||
|
max: number,
|
||
|
comparator: (x: number) => number
|
||
|
) {
|
||
|
let mid = 0
|
||
|
while (true) {
|
||
|
mid = min + (max - min) / 2
|
||
|
|
||
|
// Break once we've reached max precision.
|
||
|
if (mid === min || mid === max) break
|
||
|
|
||
|
const comparison = comparator(mid)
|
||
|
if (comparison === 0) break
|
||
|
else if (comparison > 0) {
|
||
|
max = mid
|
||
|
} else {
|
||
|
min = mid
|
||
|
}
|
||
|
}
|
||
|
return mid
|
||
|
}
|