Binary Search Algorithm- Efficient Searching Technique
What Binary Search Actually Is
Binary search is a search algorithm that finds a target value within a sorted array. It works by repeatedly dividing the search interval in half. If the target is less than the middle element, you search the left half. If it's greater, you search the right half. You keep halving until you find the value or determine it doesn't exist.
That's it. No magic, no complexity for the sake of it. Just ruthless elimination of half the remaining data with each step.
Why Binary Search Destroys Linear Search
Linear search checks every single element, one by one. In the worst case, it examines all n elements. For a list of 1 million items, that's up to 1 million comparisons.
Binary search eliminates half the remaining elements with each comparison. For 1 million items, you need at most 20 comparisons. That's not a typo. Log base 2 of 1,000,000 is roughly 20.
This is the difference between O(n) and O(log n) time complexity:
- Linear search: O(n) — worst case examines every element
- Binary search: O(log n) — halves the search space each step
The Catch: Your Data Must Be Sorted
Binary search only works on sorted data. This is non-negotiable. If your array isn't sorted, you have two options:
- Sort it first, then use binary search
- Use linear search if sorting overhead isn't worth it
Sorting costs O(n log n) time. If you're doing a one-time search on unsorted data, just use linear search. If you're doing thousands of searches on the same dataset, sort once and use binary search repeatedly.
How Binary Search Works (Step by Step)
Let's say you have a sorted array: [2, 5, 8, 12, 16, 23, 38, 56, 72, 91] and you want to find 23.
Step 1: Set boundaries
Start with left = 0 (first index) and right = 9 (last index). The middle is (0 + 9) / 2 = 4. Array[4] = 16.
Step 2: Compare
Is 23 == 16? No. Is 23 > 16? Yes. So eliminate the left half (indices 0-4). Set left = 5.
Step 3: Repeat
New middle = (5 + 9) / 2 = 7. Array[7] = 56. Is 23 == 56? No. Is 23 < 56? Yes. Eliminate the right half. Set right = 6.
Step 4: Narrow down
Middle = (5 + 6) / 2 = 5. Array[5] = 23. Found it. Done in 3 steps.
Binary Search vs Linear Search Comparison
| Array Size | Linear Search (worst) | Binary Search (worst) |
|---|---|---|
| 10 | 10 comparisons | 4 comparisons |
| 100 | 100 comparisons | 7 comparisons |
| 1,000 | 1,000 comparisons | 10 comparisons |
| 1,000,000 | 1,000,000 comparisons | 20 comparisons |
| 1,000,000,000 | 1,000,000,000 comparisons | 30 comparisons |
The numbers don't lie. Binary search scales absurdly well.
Getting Started: Implementation
Pseudocode
Before code, understand the logic:
function binarySearch(array, target):
left = 0
right = length(array) - 1
while left <= right:
mid = (left + right) / 2
if array[mid] == target:
return mid
else if array[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1 // not found
Python Implementation
```python def binary_search(arr, target): left, right = 0, len(arr) - 1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1 ```
JavaScript Implementation
```javascript function binarySearch(arr, target) { let left = 0; let right = arr.length - 1; while (left <= right) { const mid = Math.floor((left + right) / 2); if (arr[mid] === target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } ```
Java Implementation
```java public static int binarySearch(int[] arr, int target) { int left = 0; int right = arr.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == target) { return mid; } else if (arr[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return -1; } ```
Common Mistakes That Break Binary Search
- Integer overflow on mid calculation: Use
mid = left + (right - left) / 2instead of(left + right) / 2. In languages with fixed integer sizes, left + right can overflow. - Using unsorted arrays: Results are garbage. Always verify your data is sorted.
- Off-by-one errors: Using
left < rightinstead ofleft <= rightin the while loop misses the middle element in single-element cases. - Updating boundaries incorrectly: When target is greater, set
left = mid + 1. When target is smaller, setright = mid - 1. Usingmidinstead ofmid + 1causes infinite loops.
When to Use Binary Search
Binary search is the right choice when:
- You have a sorted dataset
- You need to perform multiple searches on the same data
- Search performance is critical
- Data size is large (100+ elements minimum for the speed difference to matter significantly)
Stick with linear search when:
- Data is unsorted and one-time lookup
- Dataset is small
- You're searching linked lists (binary search requires random access)
Real-World Applications
Binary search isn't just academic. You'll encounter it in:
- Dictionary lookups — sorted word lists
- Database indexing — B-trees use binary search principles
- Version control — finding commits in git uses binary search
- Finding peak elements in mountain arrays
- Determining answer bounds in optimization problems (like finding minimum maximum distance)
Recursive vs Iterative
The iterative version (shown above) is generally preferred. It uses O(1) space. The recursive version is cleaner to read but requires O(log n) stack space.
Recursive Python version:
```python def binary_search_recursive(arr, target, left, right): if left > right: return -1 mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: return binary_search_recursive(arr, target, mid + 1, right) else: return binary_search_recursive(arr, target, left, mid - 1) ```
Use iterative. Stack overflow isn't worth the marginal readability gain.
The Bottom Line
Binary search is one of the few algorithms that's both simple to understand and massively efficient in practice. If you're searching sorted data and not using it, you're wasting cycles.
Learn the implementation. Memorize the boundary conditions. This is one of those algorithms that separates people who know basics from people who can actually code.