Binary Search vs Linear Search Real Cost Difference in DSA C - Complexity Comparison
We want to understand how searching for a number in a list takes different amounts of time depending on the method used.
How does the time needed grow as the list gets bigger?
Analyze the time complexity of the following code snippet.
// Linear Search
int linearSearch(int arr[], int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target) return i;
}
return -1;
}
// Binary Search (array must be sorted)
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 shows two ways to find a number in a list: checking one by one (linear) and cutting the search area in half each time (binary).
Identify the loops, recursion, array traversals that repeat.
- Primary operation in linear search: Checking each element one by one.
- How many times: Up to n times, where n is the list size.
- Primary operation in binary search: Comparing the middle element and cutting the search space in half.
- How many times: About log base 2 of n times, because the list size halves each step.
Explain the growth pattern intuitively.
| Input Size (n) | Linear Search Steps | Binary Search Steps |
|---|---|---|
| 10 | Up to 10 checks | Up to 4 checks |
| 100 | Up to 100 checks | Up to 7 checks |
| 1000 | Up to 1000 checks | Up to 10 checks |
Pattern observation: Linear search steps grow directly with list size, while binary search steps grow very slowly as the list gets bigger.
Time Complexity: O(n) for linear search, O(log n) for binary search
This means linear search checks each item one by one, so time grows with list size, but binary search quickly narrows down the search, so time grows much slower.
[X] Wrong: "Binary search works on any list, sorted or not."
[OK] Correct: Binary search only works correctly if the list is sorted, otherwise it can miss the target or give wrong results.
Knowing when and why to use linear or binary search shows you understand how to pick the right tool for the job, a key skill in coding and problem solving.
"What if the list is sorted but stored in a linked list instead of an array? How would the time complexity of binary search change?"
Practice
Solution
Step 1: Understand the search algorithms
Binary Search divides the search space in half each step, while Linear Search checks elements one by one.Step 2: Compare performance on large sorted arrays
Binary Search takes about log2(1,000,000) ≈ 20 steps, Linear Search may take up to 1,000,000 steps.Final Answer:
Binary Search -> Option BQuick Check:
Binary Search is faster on sorted large arrays [OK]
- Thinking Linear Search is faster on sorted arrays
- Ignoring the array must be sorted for Binary Search
- Confusing average and worst-case times
arr with n elements?Solution
Step 1: Identify binary search loop boundaries
Binary Search uses two pointers: low starting at 0 and high at n-1 (last index).Step 2: Check loop condition correctness
The loop continues while low is less than or equal to high to cover all elements.Final Answer:
int low = 0, high = n - 1; while (low <= high) { ... } -> Option DQuick Check:
Binary Search loop uses low <= high [OK]
- Using incorrect loop conditions like < or > only
- Starting indices from 1 instead of 0 in C arrays
- Using for loop without adjusting high pointer
int arr[] = {2, 4, 6, 8, 10};
int n = 5;
int target = 8;
int low = 0, high = n - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (arr[mid] == target) {
printf("Found at index %d", mid);
break;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}Solution
Step 1: Calculate mid and compare with target
Initial low=0, high=4, mid=(0+4)/2=2, arr[2]=6 < 8, so low=mid+1=3.Step 2: Next iteration mid and check
Now low=3, high=4, mid=(3+4)/2=3, arr[3]=8 equals target, print index 3.Final Answer:
Found at index 3 -> Option AQuick Check:
Binary Search finds 8 at index 3 [OK]
- Using integer division incorrectly for mid
- Not updating low or high correctly
- Confusing array indices starting at 1
int binarySearch(int arr[], int n, int target) {
int low = 0, high = n;
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: Check initialization of high pointer
Array indices go from 0 to n-1, so high must be n-1, not n.Step 2: Understand impact of wrong high value
Setting high = n causes out-of-bounds access at arr[n], leading to undefined behavior.Final Answer:
high should be initialized to n - 1, not n -> Option AQuick Check:
Array index max is n-1, so high = n-1 [OK]
- Setting high to n causing out-of-bounds
- Changing low start incorrectly
- Incorrect mid calculation formula
Solution
Step 1: Calculate average comparisons for Linear Search
Linear Search checks on average half the array: 10,000 / 2 = 5,000 comparisons.Step 2: Calculate average comparisons for Binary Search
Binary Search takes about log2(10,000) ≈ 14 comparisons on average.Step 3: Compare the two averages
14 comparisons (Binary Search) is much less than 5,000 (Linear Search).Final Answer:
Binary Search, because it reduces search space by half each step -> Option CQuick Check:
Binary Search average comparisons << Linear Search [OK]
- Assuming Linear Search is faster because it stops early
- Ignoring that array must be sorted for Binary Search
- Confusing worst-case with average-case comparisons
Ready to prove it?
Pass the test and this pattern moves unknown
