Binary search splits a sorted list in half to find a target quickly by checking the middle element and deciding which half to search next.
Analogy: Imagine looking for a word in a dictionary by opening it in the middle, then deciding if your word is before or after that page, and repeating the process on the chosen half.
Time: O(log n) because each step halves the search space
Space: O(log n) due to recursive call stack depth proportional to log n
vs Alternative: Compared to linear search O(n), binary search is much faster on sorted arrays by reducing search space exponentially
Edge Cases
empty array
returns -1 immediately as start > end
DSA Javascript
if (start > end) return -1; // base case: target not found
target not in array
recursion ends when start > end, returns -1
DSA Javascript
if (start > end) return -1; // base case: target not found
array with one element
checks single element, returns index if match or -1 if not
DSA Javascript
if (arr[mid] === target) { return mid; }
When to Use This Pattern
When you need to find an item quickly in a sorted list, reach for recursive binary search because it cuts the search space in half each step.
Common Mistakes
Mistake: Not updating start or end correctly in recursive calls causing infinite recursion Fix: Ensure start and end are adjusted to mid - 1 or mid + 1 respectively to shrink search space
Mistake: Calculating mid as (start + end) without floor causing float index Fix: Use Math.floor to get integer mid index
Mistake: Not handling base case when start > end leading to stack overflow Fix: Add base case to return -1 when start > end
Summary
It finds a target value in a sorted array by repeatedly splitting the search range in half using recursion.
Use it when you have a sorted list and want to find an element efficiently.
The key insight is checking the middle element to decide which half to search next, cutting the problem size in half each time.