0
0
DSA Cprogramming~10 mins

Merge Sort as Divide and Conquer in DSA C - Execution Trace

Choose your learning style9 modes available
Concept Flow - Merge Sort as Divide and Conquer
Start with full array
Divide array into two halves
Recursively sort left half
Recursively sort right half
Merge two sorted halves
Sorted array
Done
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 divides the array and merges sorted halves.
Execution Table
StepOperationSub-array IndicesAction DetailArray State
1Divide[0..7]Split into [0..3] and [4..7][38, 27, 43, 3, 9, 82, 10, 15]
2Divide[0..3]Split into [0..1] and [2..3][38, 27, 43, 3, 9, 82, 10, 15]
3Divide[0..1]Split into [0..0] and [1..1][38, 27, 43, 3, 9, 82, 10, 15]
4Base case[0..0]Single element, no action[38, 27, 43, 3, 9, 82, 10, 15]
5Base case[1..1]Single element, no action[38, 27, 43, 3, 9, 82, 10, 15]
6Merge[0..1]Merge [38] and [27] into sorted [27, 38][27, 38, 43, 3, 9, 82, 10, 15]
7Divide[2..3]Split into [2..2] and [3..3][27, 38, 43, 3, 9, 82, 10, 15]
8Base case[2..2]Single element, no action[27, 38, 43, 3, 9, 82, 10, 15]
9Base case[3..3]Single element, no action[27, 38, 43, 3, 9, 82, 10, 15]
10Merge[2..3]Merge [43] and [3] into sorted [3, 43][27, 38, 3, 43, 9, 82, 10, 15]
11Merge[0..3]Merge [27, 38] and [3, 43] into sorted [3, 27, 38, 43][3, 27, 38, 43, 9, 82, 10, 15]
12Divide[4..7]Split into [4..5] and [6..7][3, 27, 38, 43, 9, 82, 10, 15]
13Divide[4..5]Split into [4..4] and [5..5][3, 27, 38, 43, 9, 82, 10, 15]
14Base case[4..4]Single element, no action[3, 27, 38, 43, 9, 82, 10, 15]
15Base case[5..5]Single element, no action[3, 27, 38, 43, 9, 82, 10, 15]
16Merge[4..5]Merge [9] and [82] into sorted [9, 82][3, 27, 38, 43, 9, 82, 10, 15]
17Divide[6..7]Split into [6..6] and [7..7][3, 27, 38, 43, 9, 82, 10, 15]
18Base case[6..6]Single element, no action[3, 27, 38, 43, 9, 82, 10, 15]
19Base case[7..7]Single element, no action[3, 27, 38, 43, 9, 82, 10, 15]
20Merge[6..7]Merge [10] and [15] into sorted [10, 15][3, 27, 38, 43, 9, 82, 10, 15]
21Merge[4..7]Merge [9, 82] and [10, 15] into sorted [9, 10, 15, 82][3, 27, 38, 43, 9, 10, 15, 82]
22Merge[0..7]Merge [3, 27, 38, 43] and [9, 10, 15, 82] into sorted [3, 9, 10, 15, 27, 38, 43, 82][3, 9, 10, 15, 27, 38, 43, 82]
23DoneFull arrayArray fully sorted[3, 9, 10, 15, 27, 38, 43, 82]
💡 All sub-arrays reduced to single elements and merged back sorted
Variable Tracker
VariableStartAfter Step 6After Step 10After Step 11After Step 16After Step 20After Step 21After Step 22Final
arr[38, 27, 43, 3, 9, 82, 10, 15][27, 38, 43, 3, 9, 82, 10, 15][27, 38, 3, 43, 9, 82, 10, 15][3, 27, 38, 43, 9, 82, 10, 15][3, 27, 38, 43, 9, 82, 10, 15][3, 27, 38, 43, 9, 82, 10, 15][3, 27, 38, 43, 9, 10, 15, 82][3, 9, 10, 15, 27, 38, 43, 82][3, 9, 10, 15, 27, 38, 43, 82]
left000044400
right777777777
mid312356737
Key Moments - 3 Insights
Why do we stop dividing when the sub-array has only one element?
Because a single element is already sorted, so no further division or merging is needed. See steps 4, 5, 8, 9, 14, 15, 18, 19 in the execution_table.
How does merging two sorted halves keep the array sorted?
Merging compares elements from both halves and picks the smaller one each time, building a sorted combined array. See steps 6, 10, 11, 16, 20, 21, 22 for merging details.
Why do we calculate mid as (left + right) / 2?
To split the array roughly in half for balanced division, ensuring efficient sorting. This is shown in variable_tracker where mid changes as sub-arrays change.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 6, what is the array state after merging?
A[27, 38, 43, 3, 9, 82, 10, 15]
B[38, 27, 43, 3, 9, 82, 10, 15]
C[3, 27, 38, 43, 9, 82, 10, 15]
D[27, 38, 3, 43, 9, 82, 10, 15]
💡 Hint
Check the 'Array State' column in execution_table row with Step 6.
At which step does the full array become completely sorted?
AStep 21
BStep 22
CStep 23
DStep 20
💡 Hint
Look for 'Done' operation and final sorted array in execution_table.
If the initial array had only 4 elements, how would the number of divide steps change?
AIt would increase
BIt would decrease
CIt would stay the same
DIt would be zero
💡 Hint
Fewer elements mean fewer splits; check divide steps in execution_table.
Concept Snapshot
Merge Sort divides array into halves recursively
Sorts each half separately
Merges sorted halves into one sorted array
Uses mid = (left + right) / 2 to split
Stops dividing when sub-array size is 1
Merging compares and combines sorted halves
Full Transcript
Merge Sort works by splitting the array into smaller parts until each part has one element. Then it merges these parts back together in sorted order. The code divides the array by calculating the middle index and recursively sorting the left and right halves. When merging, it compares elements from both halves and builds a sorted array. This process continues until the entire array is sorted. The execution table shows each divide and merge step with the array state. Key points include stopping division at single elements and merging sorted halves carefully to maintain order.