Binary Search Iterative Approach in DSA C++ - Time & Space Complexity
We want to understand how the time taken by binary search changes as the list size grows.
Specifically, how many steps does it take to find a number in a sorted list?
Analyze the time complexity of the following code snippet.
int binarySearch(int arr[], int n, int target) {
int left = 0, right = n - 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;
}
This code searches for a target number in a sorted array by repeatedly dividing the search range in half.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The while loop that halves the search range each time.
- How many times: The loop runs until the search range is empty, roughly halving the range each step.
Each step cuts the search area in half, so the number of steps grows slowly as the list gets bigger.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 4 steps |
| 100 | About 7 steps |
| 1000 | About 10 steps |
Pattern observation: Doubling the input size adds only one extra step.
Time Complexity: O(log n)
This means the number of steps grows slowly, increasing by one step each time the input size doubles.
[X] Wrong: "Binary search checks every element one by one, so it is O(n)."
[OK] Correct: Binary search skips half the elements each step, so it does not check all elements.
Knowing binary search time complexity helps you explain why it is efficient and when to use it in real problems.
"What if the array was not sorted? How would the time complexity change?"
Practice
binarySearchIterative function in the iterative binary search approach?Solution
Step 1: Understand the function goal
The binary search function is designed to locate a target value within a sorted array efficiently.Step 2: Identify the operation performed
It repeatedly divides the search interval in half to find the target's position or determine it is not present.Final Answer:
To find the position of a target value in a sorted array -> Option AQuick Check:
Binary search locates target index [OK]
- Thinking binary search sorts the array
- Confusing binary search with linear search
- Assuming it works on unsorted arrays
Solution
Step 1: Understand overflow risk in mid calculation
Using (low + high) / 2 can overflow if low and high are large integers.Step 2: Use safe formula to avoid overflow
The formula low + (high - low) / 2 calculates mid without adding large numbers directly.Final Answer:
int mid = low + (high - low) / 2; -> Option CQuick Check:
Safe mid calculation avoids overflow [OK]
- Using (low + high)/2 causing overflow
- Subtracting incorrectly in mid calculation
- Mixing up low and high in formula
int arr[] = {2, 4, 6, 8, 10};
int n = 5;
int target = 6;
int result = binarySearchIterative(arr, n, target);
std::cout << result << std::endl;
// Assume binarySearchIterative is correctly implemented iterative binary searchSolution
Step 1: Identify the target and array
The array is {2, 4, 6, 8, 10} and the target is 6.Step 2: Find the index of target using binary search
6 is at index 2 (0-based indexing) in the array.Final Answer:
2 -> Option BQuick Check:
Index of 6 in array = 2 [OK]
- Confusing index with value
- Using 1-based indexing instead of 0-based
- Assuming target not found returns 0
int binarySearchIterative(int arr[], int n, int target) {
int low = 0, high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}Solution
Step 1: Review mid calculation
Mid is calculated as (low + high) / 2 which can overflow if low and high are large.Step 2: Suggest safer mid calculation
Use low + (high - low) / 2 to avoid overflow in mid calculation.Final Answer:
The mid calculation can cause integer overflow -> Option AQuick Check:
Mid calculation overflow risk = true [OK]
- Changing loop condition incorrectly
- Returning 0 instead of -1 when not found
- Assuming binary search works on unsorted arrays
arr = {1, 3, 5, 7, 9, 11, 13}, how many iterations will the iterative binary search take to find the target value 7?Solution
Step 1: Initialize low and high pointers
low = 0, high = 6 (array length - 1)Step 2: Trace each iteration to find 7
Iteration 1: mid = 0 + (6-0)/2 = 3, arr[3] = 7 (target found at first check)Step 3: Count iterations
Only 1 iteration is needed because target is found immediately at mid index 3.Final Answer:
1 -> Option DQuick Check:
Target found at first mid check [OK]
- Assuming always 3 iterations for any search
- Counting array length instead of iterations
- Forgetting zero-based indexing
Ready to prove it?
Pass the test and this pattern moves unknown
