[low, high], на каждом шаге берёт серединуmid и сравнивает arr[mid] с target: при > сдвигает правую границу, при< – левую, при === – возвращает индекс. Останавливается, когда low > high (элемент отсутствует).Время – O(log n), Память – O(1)
1function binarySearch(arr: number[], target: number): number {2 let low = 0, high = arr.length - 1;3 while (low <= high) {4 const mid = Math.floor((low + high) / 2);5 const guess = arr[mid];6 if (guess === target) return mid;7 if (guess > target) high = mid - 1; else low = mid + 1;8 }9 return -1;10}1112const myList = [11,33,55,77,99];13binarySearch(myList, 11) // index -> 014binarySearch(myList, 33) // index -> 115binarySearch(myList, 99) // index -> 416binarySearch(myList, 42) // index -> -117