Bird
Raised Fist0
DSA Javaprogramming~10 mins

Binary Search as Divide and Conquer in DSA Java - Execution Trace

Choose your learning style10 modes available
Concept Flow - Binary Search as Divide and Conquer
Start with sorted array and target
↓
Find middle element
↓
Compare middle with target
↓
Search left half
↓
Repeat steps on chosen half
↓
If found, return index
↓
If empty segment, return -1 (not found)
Binary search splits the sorted array into halves, compares the middle element with the target, and recursively searches the half where the target can be.
Execution Sample
DSA Java
int binarySearch(int[] arr, int target, int left, int right) {
  if (left > right) return -1;
  int mid = left + (right - left) / 2;
  if (arr[mid] == target) return mid;
  else if (arr[mid] > target) return binarySearch(arr, target, left, mid - 1);
  else return binarySearch(arr, target, mid + 1, right);
}
This code searches for target in a sorted array by repeatedly dividing the search range in half.
Execution Table
StepOperationLeft IndexRight IndexMid IndexMid ValueComparisonNext ActionVisual State
1Start search06377 vs 6: 7 > 6Search left half[1, 3, 5, 7, 9, 11, 13]
2Search left half02133 vs 6: 3 < 6Search right half[1, 3, 5]
3Search right half22255 vs 6: 5 < 6Search right half[5]
4Search right half32--Left > RightReturn -1 (not found)[]
💡 Search ends when left index exceeds right index, meaning target is not in array.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4
left00233
right62222
mid-312-
midValue-735-
searchRange[1,3,5,7,9,11,13][1,3,5][5][][]
Key Moments - 3 Insights
Why does the search stop when left > right?
When left index is greater than right index (see Step 4 in execution_table), it means the search segment is empty and the target is not found.
Why do we calculate mid as left + (right - left) / 2 instead of (left + right) / 2?
Calculating mid as left + (right - left) / 2 prevents integer overflow when left and right are large, ensuring safe midpoint calculation.
Why do we search the right half when mid value is less than target?
Because the array is sorted, if mid value is less than target, the target can only be in the right half (see Steps 2 and 3 in execution_table).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the mid value at Step 2?
A3
B5
C7
D6
💡 Hint
Check the 'Mid Value' column in the row for Step 2.
At which step does the search segment become empty causing the search to stop?
AStep 3
BStep 4
CStep 2
DStep 1
💡 Hint
Look for the step where 'Left > Right' condition is true in the 'Comparison' column.
If the target was 5 instead of 6, at which step would the search find it?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Check when mid value equals the target in the 'Mid Value' and 'Comparison' columns.
Concept Snapshot
Binary Search divides a sorted array into halves.
Check middle element each time.
If middle equals target, return index.
If middle > target, search left half.
If middle < target, search right half.
Stop when search range is empty (left > right).
Full Transcript
Binary search is a method to find a target value in a sorted array by repeatedly dividing the search range in half. We start with the whole array and find the middle element. If the middle element matches the target, we return its index. If the middle element is greater than the target, we search the left half. If it is less, we search the right half. This process repeats until the target is found or the search range becomes empty, meaning the target is not in the array. The midpoint is calculated safely to avoid overflow. The search stops when the left index exceeds the right index, indicating no elements remain to check.

Practice

(1/5)
1. What is the main idea behind Binary Search as a divide and conquer algorithm?
easy
A. It searches every element one by one from start to end.
B. It divides the search space into two halves and eliminates one half each time.
C. It sorts the array before searching.
D. It uses recursion to add elements.

Solution

  1. Step 1: Understand divide and conquer in binary search

    Binary search splits the sorted array into two halves and decides which half to continue searching in.
  2. Step 2: Eliminate half the search space

    By comparing the middle element with the target, it discards one half, reducing the problem size quickly.
  3. Final Answer:

    It divides the search space into two halves and eliminates one half each time. -> Option B
  4. Quick Check:

    Divide and conquer = split and discard half [OK]
Hint: Binary search halves the search space each step [OK]
Common Mistakes:
  • Thinking binary search checks every element
  • Confusing binary search with sorting
  • Believing binary search adds elements
2. Which of the following is the correct Java method signature for a binary search function on an integer array?
easy
A. public static int binarySearch(int[] arr, int target)
B. int binarySearch(int arr[], target)
C. public int binarySearch(int[] arr, int target, int start, int end)
D. static void binarySearch(int[] arr, int target)

Solution

  1. Step 1: Check method signature correctness

    public static int binarySearch(int[] arr, int target) uses public static, returns int index, and has correct parameter types and order.
  2. Step 2: Compare other options

    int binarySearch(int arr[], target) misses access modifier and parameter type for target; public int binarySearch(int[] arr, int target, int start, int end) has extra parameters but no static; static void binarySearch(int[] arr, int target) returns void which is incorrect for search.
  3. Final Answer:

    public static int binarySearch(int[] arr, int target) -> Option A
  4. Quick Check:

    Correct signature returns int and uses static [OK]
Hint: Binary search returns index as int, not void [OK]
Common Mistakes:
  • Omitting static keyword
  • Wrong return type (void instead of int)
  • Missing parameter types
3. What will be the output of the following Java code snippet?
int[] arr = {2, 4, 6, 8, 10};
int target = 6;
int result = binarySearch(arr, target);
System.out.println(result);

public static int binarySearch(int[] arr, int target) {
    int left = 0, 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;
}
medium
A. 2
B. 3
C. -1
D. 0

Solution

  1. Step 1: Identify the target and array

    The array is [2,4,6,8,10], target is 6.
  2. Step 2: Trace binary search steps

    Initial left=0, right=4, mid=2; arr[2]=6 equals target, so return 2.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Index of 6 in array = 2 [OK]
Hint: Check middle element index for target match first [OK]
Common Mistakes:
  • Confusing index with value
  • Off-by-one errors in mid calculation
  • Returning wrong index when target found
4. Find the error in the following binary search code and choose the correct fix.
public static int binarySearch(int[] arr, int target) {
    int left = 0, right = arr.length;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] == target) return mid;
        else if (arr[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}
medium
A. Change mid calculation to mid = left - right to fix mid index.
B. Change while condition to left < right to fix infinite loop.
C. Change right to arr.length - 1 to avoid ArrayIndexOutOfBoundsException.
D. Remove else if and use only if statements.

Solution

  1. Step 1: Identify array bounds usage

    Right is set to arr.length, which is out of array index range (max index is length-1).
  2. Step 2: Fix right boundary

    Set right = arr.length - 1 to prevent accessing invalid index and avoid runtime error.
  3. Final Answer:

    Change right to arr.length - 1 to avoid ArrayIndexOutOfBoundsException. -> Option C
  4. Quick Check:

    Array indices go from 0 to length-1 [OK]
Hint: Array last index is length minus one [OK]
Common Mistakes:
  • Setting right to arr.length causes index error
  • Incorrect mid calculation
  • Changing loop condition incorrectly
5. You have a sorted array with duplicate elements: int[] arr = {1, 2, 2, 2, 3, 4}. How would you modify binary search to find the first occurrence of the target 2?
hard
A. Modify mid calculation to always pick left middle element.
B. Return the first found index immediately without further checks.
C. Use linear search instead of binary search for duplicates.
D. After finding target, continue searching left half to find earlier occurrence.

Solution

  1. Step 1: Understand duplicate handling in binary search

    Standard binary search returns any matching index, not necessarily first occurrence.
  2. Step 2: Modify search to find first occurrence

    When target found, move right pointer to mid-1 to continue searching left side for earlier matches.
  3. Final Answer:

    After finding target, continue searching left half to find earlier occurrence. -> Option D
  4. Quick Check:

    Find first occurrence by searching left after match [OK]
Hint: On match, search left half to find first duplicate [OK]
Common Mistakes:
  • Stopping at first found index
  • Using linear search unnecessarily
  • Changing mid calculation without reason
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