Bird
Raised Fist0
DSA C++programming~10 mins

Why Binary Search and What Sorted Order Gives You in DSA C++ - Why It Works

Choose your learning style10 modes available
Concept Flow - Why Binary Search and What Sorted Order Gives You
Start with sorted array
↓
Set low and high pointers
↓
Calculate mid = (low + high) / 2
↓
Compare target with array[mid
↓
Move high
↓
Repeat until low > high
↓
Target not found
Binary search works on sorted arrays by repeatedly dividing the search range in half, comparing the middle element to the target, and narrowing the search until the target is found or the range is empty.
Execution Sample
DSA C++
int binarySearch(int arr[], int size, int target) {
  int low = 0, high = size - 1;
  while (low <= high) {
    int mid = low + (high - low) / 2;
    if (arr[mid] == target) return mid;
    else if (arr[mid] < target) low = mid + 1;
    else high = mid - 1;
  }
  return -1;
}
This code searches for a target value in a sorted array by repeatedly checking the middle element and adjusting the search range.
Execution Table
StepOperationlowhighmidComparisonActionSearch Range Visual
1Initialize low and high06--Start search[1, 3, 5, 7, 9, 11, 13]
2Calculate mid063arr[3]=7 vs target=9target > mid, move low[1, 3, 5, 7, 9, 11, 13]
3Update low46---[9, 11, 13]
4Calculate mid465arr[5]=11 vs target=9target < mid, move high[9, 11, 13]
5Update high44---[9]
6Calculate mid444arr[4]=9 vs target=9target == mid, found[9]
7Return index----Return 4[9]
💡 Search ends when target is found at index 4 or when low > high if target not found.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4After Step 5After Step 6Final
low004444-
high666644-
mid-3-5-4-
target9999999
Key Moments - 3 Insights
Why must the array be sorted for binary search to work?
Because binary search decides which half to search next by comparing the target with the middle element. If the array is not sorted, this logic fails. See execution_table steps 2 and 4 where the search range is narrowed based on comparisons.
Why do we update 'low' to mid + 1 and 'high' to mid - 1 instead of just mid?
Because mid has already been checked and does not match the target, so we exclude it from the next search range. This avoids infinite loops. Refer to execution_table steps 3 and 5 where low and high are adjusted accordingly.
What happens if the target is not in the array?
The search range will eventually become invalid (low > high), causing the loop to stop and return -1. This is shown in the exit_note and the loop condition in the code.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'mid' at step 4?
A3
B5
C4
D6
💡 Hint
Check the 'mid' column in execution_table row for step 4.
At which step does the search range reduce to a single element?
AStep 3
BStep 6
CStep 5
DStep 2
💡 Hint
Look at the 'Search Range Visual' column to see when only one element remains.
If the target was 12 instead of 9, what would happen at step 6?
ASearch ends with target not found
BSearch continues with low updated
CTarget found at index 4
DHigh pointer moves to mid - 1
💡 Hint
Consider the exit condition when target is not found and low > high.
Concept Snapshot
Binary Search requires a sorted array.
Start with low=0 and high=size-1.
Find mid = (low + high) / 2.
Compare target with arr[mid].
If equal, return mid.
If target > arr[mid], move low to mid+1.
If target < arr[mid], move high to mid-1.
Repeat until low > high (target not found).
Full Transcript
Binary search is a fast way to find a target in a sorted array. It works by repeatedly dividing the search range in half. We start with two pointers: low at the start and high at the end of the array. We find the middle index mid and compare the target with the element at mid. If they match, we return mid. If the target is greater, we move low to mid + 1 to search the right half. If the target is smaller, we move high to mid - 1 to search the left half. We repeat this until low is greater than high, which means the target is not in the array. This method is much faster than checking each element one by one, but it only works if the array is sorted.

Practice

(1/5)
1. Why is it important for a list to be sorted before applying binary search?
easy
A. Because binary search can only search for numbers, not strings
B. Because binary search divides the list based on order to find elements quickly
C. Because binary search works only on lists with unique elements
D. Because binary search requires the list to be reversed

Solution

  1. Step 1: Understand binary search working

    Binary search works by repeatedly dividing the list into halves and deciding which half to search next based on order.
  2. Step 2: Importance of sorted order

    If the list is not sorted, dividing by order does not help because elements are not arranged predictably.
  3. Final Answer:

    Because binary search divides the list based on order to find elements quickly -> Option B
  4. Quick Check:

    Sorted list needed for binary search [OK]
Hint: Binary search needs sorted data to halve search space fast [OK]
Common Mistakes:
  • Thinking binary search works on unsorted lists
  • Confusing binary search with linear search
  • Believing binary search requires unique elements
2. Which of the following is the correct syntax to perform binary search on a sorted vector v in C++ using std::binary_search?
easy
A. std::binary_search(v.begin(), v.end(), target);
B. std::binary_search(v, target);
C. binary_search(v, 0, v.size(), target);
D. std::binary_search(target, v.begin(), v.end());

Solution

  1. Step 1: Recall std::binary_search parameters

    It takes two iterators marking the start and end of the range, and the target value.
  2. Step 2: Match correct syntax

    std::binary_search(v.begin(), v.end(), target); correctly uses v.begin(), v.end(), and target in that order.
  3. Final Answer:

    std::binary_search(v.begin(), v.end(), target); -> Option A
  4. Quick Check:

    Correct iterator usage in binary_search [OK]
Hint: Use begin() and end() iterators with binary_search [OK]
Common Mistakes:
  • Passing vector directly without iterators
  • Swapping target and iterator arguments
  • Using incorrect function signature
3. What will be the output of the following C++ code?
std::vector<int> v = {2, 4, 6, 8, 10};
bool found = std::binary_search(v.begin(), v.end(), 6);
std::cout << (found ? "Found" : "Not Found") << std::endl;
medium
A. Runtime Error
B. Not Found
C. Compilation Error
D. Found

Solution

  1. Step 1: Check if vector is sorted

    The vector {2, 4, 6, 8, 10} is sorted in ascending order.
  2. Step 2: Apply binary_search for 6

    6 is present in the vector, so binary_search returns true.
  3. Final Answer:

    Found -> Option D
  4. Quick Check:

    6 exists in sorted vector, so output is Found [OK]
Hint: Check if target is in sorted list to predict binary_search output [OK]
Common Mistakes:
  • Assuming binary_search returns index instead of bool
  • Forgetting vector must be sorted
  • Confusing output strings
4. Identify the error in the following code snippet that attempts to use binary search:
std::vector<int> v = {5, 3, 1, 4, 2};
bool found = std::binary_search(v.begin(), v.end(), 3);
std::cout << (found ? "Yes" : "No") << std::endl;
medium
A. Missing include for vector header
B. binary_search syntax is incorrect
C. The vector is not sorted before binary_search
D. The target value 3 is not in the vector

Solution

  1. Step 1: Check vector order

    The vector {5, 3, 1, 4, 2} is not sorted.
  2. Step 2: Understand binary_search requirement

    binary_search requires the vector to be sorted; otherwise, the result is undefined or incorrect.
  3. Final Answer:

    The vector is not sorted before binary_search -> Option C
  4. Quick Check:

    Unsorted vector breaks binary_search [OK]
Hint: Always sort before binary_search to avoid wrong results [OK]
Common Mistakes:
  • Ignoring the need to sort before searching
  • Assuming binary_search sorts internally
  • Thinking target absence causes error
5. Given a sorted vector v = {1, 3, 5, 7, 9, 11}, you want to find the smallest element greater than or equal to 6 using binary search logic. Which approach correctly achieves this?
hard
A. Use std::lower_bound to find the first element not less than 6
B. Use std::binary_search to check if 6 exists, then pick next element
C. Use std::upper_bound to find the first element greater than 6, then subtract one
D. Sort the vector again before searching

Solution

  1. Step 1: Understand the problem

    We want the smallest element >= 6, which is the definition of lower bound.
  2. Step 2: Choose correct function

    std::lower_bound returns iterator to first element not less than the target, perfect for this need.
  3. Step 3: Analyze other options

    binary_search only tells presence, upper_bound finds strictly greater elements, sorting again is unnecessary.
  4. Final Answer:

    Use std::lower_bound to find the first element not less than 6 -> Option A
  5. Quick Check:

    Lower bound finds smallest element >= target [OK]
Hint: Use lower_bound for smallest element >= target in sorted list [OK]
Common Mistakes:
  • Using binary_search to find element position
  • Confusing upper_bound with lower_bound
  • Unnecessary sorting before search
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard