Bird
Raised Fist0
DSA C++programming~10 mins

Search in Rotated Sorted Array in DSA C++ - Execution Trace

Choose your learning style10 modes available
Concept Flow - Search in Rotated Sorted Array
Start: Given rotated sorted array and target
↓
Initialize low=0, high=n-1
↓
While low <= high
↓
Calculate mid = (low+high)/2
↓
Check if arr[mid
↓
Return mid
↓
If left half sorted
↓
Target in left?
↓
high=mid-1
↓
Repeat loop
↓
If not found
↓
Return -1
This flow shows how binary search adapts to a rotated sorted array by checking sorted halves and narrowing search.
Execution Sample
DSA C++
int search(vector<int>& nums, int target) {
  int low = 0, high = nums.size() - 1;
  while (low <= high) {
    int mid = low + (high - low) / 2;
    if (nums[mid] == target) return mid;
    if (nums[low] <= nums[mid]) {
      if (nums[low] <= target && target < nums[mid]) high = mid - 1;
      else low = mid + 1;
    } else {
      if (nums[mid] < target && target <= nums[high]) low = mid + 1;
      else high = mid - 1;
    }
  }
  return -1;
}
This code searches for target in a rotated sorted array using modified binary search.
Execution Table
StepOperationlowmidhighCondition CheckedPointer ChangesVisual State
1Initialize pointers0-6--[4,5,6,7,0,1,2]
2Calculate mid036nums[mid]=7 != target=0-[4,5,6,7,0,1,2]
3Check left half sorted036nums[low]=4 <= nums[mid]=7 (True)-[4,5,6,7,0,1,2]
4Check if target in left half0364 <= 0 < 7 (False)low = mid + 1 = 4[4,5,6,7,0,1,2]
5Calculate mid456nums[mid]=1 != target=0-[4,5,6,7,0,1,2]
6Check left half sorted456nums[low]=0 <= nums[mid]=1 (True)-[4,5,6,7,0,1,2]
7Check if target in left half4560 <= 0 < 1 (True)high = mid - 1 = 4[4,5,6,7,0,1,2]
8Calculate mid444nums[mid]=0 == target=0-[4,5,6,7,0,1,2]
9Target found444Return mid=4-[4,5,6,7,0,1,2]
💡 Target found at index 4, loop ends.
Variable Tracker
VariableStartAfter Step 4After Step 7After Step 8Final
low04444
high66444
mid-3544
Key Moments - 3 Insights
Why do we check if the left half is sorted using nums[low] <= nums[mid]?
Because in a rotated sorted array, one half is always sorted. Checking nums[low] <= nums[mid] tells us if the left half is sorted, so we know where to search next (see steps 3 and 6 in execution_table).
Why do we update low or high based on whether the target lies within the sorted half?
If the target is inside the sorted half, we narrow the search to that half by updating low or high accordingly. Otherwise, we search the other half. This logic is shown in steps 4 and 7.
Why do we calculate mid as (low + high) / 2 each iteration?
Because binary search splits the search space in half each time. Updating mid after changing low or high ensures we check the middle of the current search range (see steps 2, 5, and 8).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'mid' at step 6?
A5
B3
C4
D6
💡 Hint
Check the 'mid' column in execution_table row with Step 6.
At which step does the condition nums[mid] == target become true?
AStep 4
BStep 8
CStep 7
DStep 9
💡 Hint
Look for the step where 'Condition Checked' column shows equality in execution_table.
If the target was 3 instead of 0, what would happen to the 'low' pointer after step 4?
AIt would remain 0
BIt would become 4
CIt would become 3
DIt would become 6
💡 Hint
Check step 4's 'Pointer Changes' and think if target=3 fits in the left half range.
Concept Snapshot
Search in Rotated Sorted Array:
- Use binary search with low, high pointers
- Calculate mid = (low+high)/2
- Check if left half (low to mid) is sorted
- If target in sorted half, narrow search there
- Else search other half
- Repeat until found or low > high
- Return index or -1 if not found
Full Transcript
This concept shows how to find a target number in a rotated sorted array using a modified binary search. We start with two pointers, low and high, at the ends of the array. We find the middle index mid and check if the middle element is the target. If not, we check which half of the array is sorted. If the left half is sorted and the target lies within it, we move the high pointer to mid-1 to search left. Otherwise, we move low to mid+1 to search right. If the right half is sorted, we do the opposite. We repeat this process until we find the target or the pointers cross, meaning the target is not in the array. This method efficiently handles the rotation by always searching the sorted half. The execution table traces each step with pointer values and conditions checked, showing how the search narrows down to the target index.

Practice

(1/5)
1. What is the main challenge when searching for an element in a rotated sorted array compared to a normal sorted array?
easy
A. The array is not fully sorted, so normal binary search cannot be directly applied.
B. The array contains duplicate elements which confuse the search.
C. The array size is unknown, so we cannot set search boundaries.
D. The array elements are all negative numbers.

Solution

  1. Step 1: Understand normal binary search assumption

    Binary search works efficiently on fully sorted arrays by comparing mid element to target.
  2. Step 2: Identify the problem with rotated arrays

    Rotated sorted arrays are sorted but shifted, so the order is broken at the rotation point, making direct binary search invalid.
  3. Final Answer:

    The array is not fully sorted, so normal binary search cannot be directly applied. -> Option A
  4. Quick Check:

    Rotated array breaks sorted order = need modified search [OK]
Hint: Look for the rotation point to adjust binary search [OK]
Common Mistakes:
  • Assuming array is fully sorted and applying normal binary search
  • Ignoring rotation and searching linearly
  • Confusing duplicates with rotation
2. Which of the following is the correct syntax to start a binary search loop for a rotated sorted array in C++?
easy
A. if (arr[mid] == target)
B. for (int i = 0; i < n; i++)
C. while (start <= end)
D. do { ... } while (start < end)

Solution

  1. Step 1: Identify loop type for binary search

    Binary search uses a while loop with condition start <= end to narrow search range.
  2. Step 2: Check options for correct loop syntax

    while (start <= end) uses while (start <= end), which is standard for binary search loops.
  3. Final Answer:

    while (start <= end) -> Option C
  4. Quick Check:

    Binary search loop uses while (start <= end) [OK]
Hint: Binary search loops use while (start <= end) [OK]
Common Mistakes:
  • Using for loop instead of while for binary search
  • Using incorrect loop condition like start < end
  • Confusing if statement with loop
3. What will be the output of the following C++ code snippet?
int arr[] = {4,5,6,7,0,1,2};
int target = 0;
int start = 0, end = 6;
int result = -1;
while (start <= end) {
  int mid = start + (end - start) / 2;
  if (arr[mid] == target) {
    result = mid;
    break;
  }
  if (arr[start] <= arr[mid]) {
    if (target >= arr[start] && target < arr[mid])
      end = mid - 1;
    else
      start = mid + 1;
  } else {
    if (target > arr[mid] && target <= arr[end])
      start = mid + 1;
    else
      end = mid - 1;
  }
}
std::cout << result << std::endl;
medium
A. 3
B. 0
C. -1
D. 4

Solution

  1. Step 1: Trace initial variables and mid calculation

    start=0, end=6, mid=3 (element 7). arr[mid] != target (0).
  2. Step 2: Check which half is sorted and adjust search

    arr[start]=4 <= arr[mid]=7, left half sorted. Target 0 not in [4,7), so search right half: start=mid+1=4.
  3. Step 3: Next iteration mid=5 (element 1)

    arr[mid]=1 != target. arr[start]=0 <= arr[mid]=1, left half sorted. Target 0 in [0,1), so end=mid-1=4.
  4. Step 4: Next iteration mid=4 (element 0)

    arr[mid]=0 == target, result=4, break loop.
  5. Final Answer:

    4 -> Option D
  6. Quick Check:

    Target 0 found at index 4 [OK]
Hint: Check sorted half and adjust start/end accordingly [OK]
Common Mistakes:
  • Not updating start/end correctly based on sorted half
  • Confusing indices and returning wrong index
  • Missing break after finding target
4. Identify the bug in the following code snippet for searching in a rotated sorted array:
int search(int arr[], int n, int target) {
  int start = 0, end = n - 1;
  while (start < end) {
    int mid = start + (end - start) / 2;
    if (arr[mid] == target) return mid;
    if (arr[start] <= arr[mid]) {
      if (target >= arr[start] && target < arr[mid])
        end = mid - 1;
      else
        start = mid + 1;
    } else {
      if (target > arr[mid] && target <= arr[end])
        start = mid + 1;
      else
        end = mid - 1;
    }
  }
  return -1;
}
medium
A. The mid calculation is incorrect and can cause overflow.
B. The loop condition should be while (start <= end) instead of while (start < end).
C. The target comparison should use > instead of >=.
D. The function does not handle empty arrays.

Solution

  1. Step 1: Analyze loop condition impact

    Using while (start < end) misses checking when start == end, possibly skipping last element.
  2. Step 2: Correct loop condition for complete search

    Changing to while (start <= end) ensures all elements are checked, including when start equals end.
  3. Final Answer:

    The loop condition should be while (start <= end) instead of while (start < end). -> Option B
  4. Quick Check:

    Loop must cover start == end to check last element [OK]
Hint: Use while (start <= end) for full binary search coverage [OK]
Common Mistakes:
  • Using while (start < end) and missing last element
  • Ignoring overflow in mid calculation (not in this code though)
  • Incorrect comparison operators
5. Given a rotated sorted array arr = {15, 18, 2, 3, 6, 12}, write a C++ function to find the index of the minimum element. What is the output of your function?
hard
A. 2
B. 0
C. 5
D. 3

Solution

  1. Step 1: Understand the minimum element in rotated array

    The minimum element is the rotation point where order breaks. Here, 2 at index 2 is smallest.
  2. Step 2: Use binary search to find minimum

    Check mid and compare with end to decide which half contains minimum. Eventually, index 2 is found.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Minimum element 2 is at index 2 [OK]
Hint: Compare mid element with end to find rotation point [OK]
Common Mistakes:
  • Returning first element index instead of minimum
  • Confusing maximum with minimum element
  • Not handling rotation correctly
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