Bird
Raised Fist0
DSA C++programming~10 mins

Merge Sort Algorithm in DSA C++ - Execution Trace

Choose your learning style10 modes available
Concept Flow - Merge Sort Algorithm
Start: Full array
↓
Divide array into two halves
↓
Recursively apply merge sort on left half
↓
Merge two sorted halves
↓
Sorted array
Merge Sort splits the array into halves recursively, sorts each half, then merges them back in order.
Execution Sample
DSA C++
void mergeSort(int arr[], int left, int right) {
  if (left < right) {
    int mid = left + (right - left) / 2;
    mergeSort(arr, left, mid);
    mergeSort(arr, mid + 1, right);
    merge(arr, left, mid, right);
  }
}
This code recursively splits the array and merges sorted halves.
Execution Table
StepOperationArray StateSub-array SortedMerge ActionVisual State
1Split full array [38, 27, 43, 3, 9, 82, 10][38, 27, 43, 3, 9, 82, 10]NoSplit into [38,27,43,3] and [9,82,10][38,27,43,3] | [9,82,10]
2Split left half [38,27,43,3][38, 27, 43, 3, 9, 82, 10]NoSplit into [38,27] and [43,3][38,27] | [43,3] | [9,82,10]
3Split left-left [38,27][38, 27, 43, 3, 9, 82, 10]NoSplit into [38] and [27][38] | [27] | [43,3] | [9,82,10]
4Merge [38] and [27][27, 38, 43, 3, 9, 82, 10]YesCompare 38 and 27, merge to [27,38][27,38] | [43,3] | [9,82,10]
5Split left-right [43,3][27, 38, 43, 3, 9, 82, 10]NoSplit into [43] and [3][27,38] | [43] | [3] | [9,82,10]
6Merge [43] and [3][27, 38, 3, 43, 9, 82, 10]YesCompare 43 and 3, merge to [3,43][27,38] | [3,43] | [9,82,10]
7Merge [27,38] and [3,43][3, 27, 38, 43, 9, 82, 10]YesMerge sorted halves to [3,27,38,43][3,27,38,43] | [9,82,10]
8Split right half [9,82,10][3, 27, 38, 43, 9, 82, 10]NoSplit into [9,82] and [10][3,27,38,43] | [9,82] | [10]
9Split right-left [9,82][3, 27, 38, 43, 9, 82, 10]NoSplit into [9] and [82][3,27,38,43] | [9] | [82] | [10]
10Merge [9] and [82][3, 27, 38, 43, 9, 82, 10]YesMerge to [9,82][3,27,38,43] | [9,82] | [10]
11Merge [9,82] and [10][3, 27, 38, 43, 9, 10, 82]YesMerge to [9,10,82][3,27,38,43] | [9,10,82]
12Merge [3,27,38,43] and [9,10,82][3, 9, 10, 27, 38, 43, 82]YesFinal merge to [3,9,10,27,38,43,82][3,9,10,27,38,43,82]
13End[3, 9, 10, 27, 38, 43, 82]YesArray fully sorted[3,9,10,27,38,43,82]
💡 All sub-arrays merged and sorted, full array sorted.
Variable Tracker
VariableStartAfter Step 4After Step 6After Step 7After Step 10After Step 11After Step 12Final
Array State[38, 27, 43, 3, 9, 82, 10][27, 38, 43, 3, 9, 82, 10][27, 38, 3, 43, 9, 82, 10][3, 27, 38, 43, 9, 82, 10][3, 27, 38, 43, 9, 82, 10][3, 27, 38, 43, 9, 10, 82][3, 9, 10, 27, 38, 43, 82][3, 9, 10, 27, 38, 43, 82]
Left Sub-array[38, 27, 43, 3][27, 38, 43, 3][27, 38, 3, 43][3, 27, 38, 43][3, 27, 38, 43][3, 27, 38, 43][3, 27, 38, 43][3, 27, 38, 43]
Right Sub-array[9, 82, 10][9, 82, 10][9, 82, 10][9, 82, 10][9, 82, 10][9, 10, 82][9, 10, 82][9, 10, 82]
Key Moments - 3 Insights
Why do we split the array until sub-arrays have only one element?
Because a single element is already sorted, as shown in steps 3 and 5 where arrays like [38] and [27] are the base cases before merging.
How does the merge step combine two sorted sub-arrays?
It compares elements from both sub-arrays and picks the smaller one step-by-step, as seen in steps 4, 6, and 7 where merging happens by comparing and ordering elements.
Why do we merge sorted halves back up the recursion?
Because merging two sorted halves produces a bigger sorted array, building up to the full sorted array, as shown in steps 7, 11, and 12.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at step 4, what is the array state after merging [38] and [27]?
A[27, 38]
B[27, 38, 43, 3, 9, 82, 10]
C[38, 27, 43, 3, 9, 82, 10]
D[38, 27]
💡 Hint
Check the 'Array State' column at step 4 in the execution_table.
At which step does the right half [9,82,10] get fully merged and sorted?
AStep 12
BStep 10
CStep 11
DStep 9
💡 Hint
Look for the step where [9,10,82] appears in the 'Array State' column.
If the initial array was already sorted, how would the merge steps change?
AMerges would still happen but no swaps needed
BNo merges would happen
CArray would be reversed
DAlgorithm would stop early
💡 Hint
Merge sort always divides and merges; sorted input means merges happen without swaps.
Concept Snapshot
Merge Sort Algorithm:
- Divide array into halves recursively
- Base case: single element arrays
- Merge two sorted halves by comparing elements
- Time complexity: O(n log n)
- Stable and efficient for large data
- Uses extra space for merging
Full Transcript
Merge Sort works by splitting the array into smaller parts until each part has one element, which is naturally sorted. Then it merges these parts back together in sorted order. The process repeats recursively for left and right halves. Each merge compares elements from two sorted sub-arrays and combines them into a bigger sorted array. This continues until the whole array is sorted. The execution table shows each split and merge step with the array state. Key moments include understanding why splitting stops at one element, how merging works by comparing elements, and why merging builds the sorted array back up. The visual quiz tests understanding of array states at merge steps and behavior on sorted input.

Practice

(1/5)
1. What is the main idea behind the Merge Sort Algorithm?
easy
A. Select the smallest element and place it at the beginning
B. Divide the array into halves, sort each half, then merge them
C. Sort the array by repeatedly swapping adjacent elements
D. Build a heap and extract elements in sorted order

Solution

  1. Step 1: Understand the divide and conquer approach

    Merge sort splits the array into two halves recursively until single elements remain.
  2. Step 2: Merge sorted halves

    It then merges these sorted halves to produce a fully sorted array.
  3. Final Answer:

    Divide the array into halves, sort each half, then merge them -> Option B
  4. Quick Check:

    Merge Sort = Divide, Sort, Merge [OK]
Hint: Remember: split, sort, then merge [OK]
Common Mistakes:
  • Confusing merge sort with bubble sort
  • Thinking merge sort swaps adjacent elements
  • Mixing merge sort with selection sort
2. Which of the following is the correct way to declare the merge function header in C++ for merge sort?
easy
A. int mergeSort(int arr[], int left, int right);
B. int merge(int arr[], int left, int mid, int right);
C. void mergeSort(int arr[], int left, int right);
D. void merge(int arr[], int left, int mid, int right);

Solution

  1. Step 1: Identify the merge function role

    The merge function combines two sorted parts; it does not return a value, so it should be void.
  2. Step 2: Check parameter list

    It takes the array and three indices: left, mid, and right to merge subarrays.
  3. Final Answer:

    void merge(int arr[], int left, int mid, int right); -> Option D
  4. Quick Check:

    Merge function = void with arr and indices [OK]
Hint: Merge combines parts, returns nothing [OK]
Common Mistakes:
  • Using int return type for merge
  • Confusing merge with mergeSort function
  • Wrong parameter order or missing parameters
3. What will be the output of the following code snippet after applying merge sort on the array?
int arr[] = {5, 2, 9, 1};
mergeSort(arr, 0, 3);
for(int i = 0; i < 4; i++) std::cout << arr[i] << " ";
medium
A. 5 2 9 1
B. 9 5 2 1
C. 1 2 5 9
D. 2 1 5 9

Solution

  1. Step 1: Apply merge sort on the array

    The array {5, 2, 9, 1} is split and sorted recursively to {1, 2, 5, 9}.
  2. Step 2: Print the sorted array

    The for loop prints elements in sorted order: 1 2 5 9.
  3. Final Answer:

    1 2 5 9 -> Option C
  4. Quick Check:

    Sorted array = 1 2 5 9 [OK]
Hint: Merge sort outputs sorted array ascending [OK]
Common Mistakes:
  • Printing original array without sorting
  • Confusing merge sort with reverse sort
  • Off-by-one errors in indices
4. Identify the error in the following merge sort code snippet:
void merge(int arr[], int left, int mid, int right) {
  int n1 = mid - left;
  int n2 = right - mid;
  int L[n1], R[n2];
  for(int i = 0; i < n1; i++) L[i] = arr[left + i];
  for(int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j];
  // merging logic...
}
medium
A. Incorrect calculation of n1 and n2 sizes
B. Wrong indexing in copying elements to L array
C. Using variable-length arrays which is invalid in C++
D. Missing return statement in void function

Solution

  1. Step 1: Check size calculations

    n1 = mid - left is missing +1 (should be mid - left + 1) to include the mid element; n2 = right - mid is correct.
  2. Step 2: Check copying to L array

    Copying starts at left + i for i < n1, which goes up to mid-1, missing arr[mid].
  3. Step 3: Identify the main error

    The error causes wrong indexing/range when copying elements to L array.
  4. Final Answer:

    Incorrect calculation of n1 and n2 sizes -> Option A
  5. Quick Check:

    Subarray size calculation off by one [OK]
Hint: Check array copy indices carefully [OK]
Common Mistakes:
  • Off-by-one errors in subarray sizes
  • Using variable-length arrays in C++
  • Ignoring void function return type
5. Given an array with many duplicate elements, how can merge sort be adapted to maintain the relative order of equal elements (stable sort)?
hard
A. Always pick the element from the left subarray first when merging equals
B. Always pick the element from the right subarray first when merging equals
C. Swap equal elements randomly during merge
D. Use quicksort instead of merge sort

Solution

  1. Step 1: Understand stability in sorting

    A stable sort keeps equal elements in their original relative order.
  2. Step 2: Apply stability in merge step

    When merging, if elements are equal, always choose the element from the left subarray first to keep order.
  3. Final Answer:

    Always pick the element from the left subarray first when merging equals -> Option A
  4. Quick Check:

    Stable merge = left element first on equals [OK]
Hint: Pick left element first on ties to keep order [OK]
Common Mistakes:
  • Picking right element first breaks stability
  • Random swaps destroy order
  • Confusing merge sort with quicksort stability
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