Why Binary Search and What Sorted Order Gives You in DSA Javascript - Performance Analysis
We want to see how fast searching works when the list is sorted.
How does sorting help us find items quicker?
Analyze the time complexity of the following binary search code.
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;
}
This code looks for a target number in a sorted array by repeatedly cutting the search area in half.
Look at what repeats as the code runs.
- Primary operation: Checking the middle element and adjusting the search range.
- How many times: The search range halves each time, so the loop runs about log base 2 of n times.
As the list gets bigger, the number of steps grows slowly.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 4 checks |
| 100 | About 7 checks |
| 1000 | About 10 checks |
Pattern observation: Doubling the input size adds only one more check.
Time Complexity: O(log n)
This means the number of steps grows slowly as the list gets bigger, making search very fast.
[X] Wrong: "Binary search works on any list, sorted or not."
[OK] Correct: Without sorting, cutting the list in half doesn't guarantee the target is in one half, so binary search won't work correctly.
Understanding binary search shows you how sorting helps speed up searching, a key skill in many coding challenges.
"What if the array was not sorted? How would the time complexity of searching change?"
Practice
Solution
Step 1: Understand binary search logic
Binary search works by comparing the middle element to the target and deciding which half to continue searching.Step 2: Importance of sorted order
This logic only works if the list is sorted, so we know which half contains the target based on comparison.Final Answer:
Because it relies on comparing the middle element to decide which half to search next -> Option BQuick Check:
Binary search needs sorted list = Because it relies on comparing the middle element to decide which half to search next [OK]
- Thinking binary search works on unsorted lists
- Confusing binary search with linear search
- Assuming binary search sorts the list automatically
arr between indices low and high in JavaScript?Solution
Step 1: Calculate middle index correctly
The middle index should be the floor of the average of low and high to get an integer index.Step 2: Check each option
const mid = Math.floor((low + high) / 2); uses Math.floor which correctly rounds down. const mid = (low + high) / 2; returns a float, const mid = Math.ceil((low + high) / 2); rounds up which can cause errors, const mid = low + high; sums indices without division.Final Answer:
const mid = Math.floor((low + high) / 2); -> Option AQuick Check:
Use Math.floor for middle index [OK]
- Not using Math.floor causing float index
- Using Math.ceil causing off-by-one errors
- Adding indices without dividing
const arr = [2, 4, 6, 8, 10];
function binarySearch(array, target) {
let low = 0, high = array.length - 1;
while (low <= high) {
const mid = Math.floor((low + high) / 2);
if (array[mid] === target) return mid;
else if (array[mid] < target) low = mid + 1;
else high = mid - 1;
}
return -1;
}
console.log(binarySearch(arr, 8));Solution
Step 1: Trace binary search steps for target 8
Initial low=0, high=4, mid=2 (value 6). Since 6 < 8, low = mid+1 = 3.Step 2: Next iteration mid=3 (value 8), matches target, return 3
The function returns index 3 where 8 is found.Final Answer:
3 -> Option AQuick Check:
Index of 8 in array = 3 [OK]
- Confusing index with value
- Off-by-one errors in mid calculation
- Returning -1 incorrectly
function binarySearch(arr, target) {
let low = 0;
let high = arr.length;
while (low <= high) {
let mid = Math.floor((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: Check initialization of high
Array indices go from 0 to length-1, so high must be arr.length - 1 to avoid out-of-bounds.Step 2: Consequences of wrong high value
Setting high = arr.length causes mid to sometimes be arr.length, which is invalid index and causes errors.Final Answer:
high should be initialized to arr.length - 1, not arr.length -> Option DQuick Check:
High index = length - 1 [OK]
- Setting high to arr.length causing index errors
- Changing low start incorrectly
- Changing loop condition wrongly
arr = [1, 3, 3, 5, 7, 7, 7, 9]. You want to find the first occurrence of the number 7 using binary search. Which modification helps achieve this?Solution
Step 1: Understand duplicate elements in sorted array
Binary search normally returns any matching index, but to find first occurrence, we must check if earlier indices also have the target.Step 2: Modify search to continue left when target found
When arr[mid] equals target, update result but continue searching left half to find earlier occurrence.Final Answer:
When arr[mid] equals target, continue searching left half to find first occurrence -> Option CQuick Check:
Search left half on match for first occurrence [OK]
- Returning immediately on first match
- Searching right half on match
- Using linear search unnecessarily
Ready to prove it?
Pass the test and this pattern moves unknown
