What is the main idea behind the 'Divide and Conquer' approach in Merge Sort?
Divide the array into two halves, sort each half recursively, then merge the two sorted halves into one sorted array.
Click to reveal answer
beginner
In Merge Sort, what is the role of the 'merge' step?
The merge step combines two sorted subarrays into a single sorted array by comparing elements one by one.
Click to reveal answer
intermediate
Why is Merge Sort considered efficient for large datasets?
Because it consistently divides the problem into smaller parts and merges them in O(n log n) time, making it faster than simple sorts like bubble sort for large data.
Click to reveal answer
beginner
What is the base case in the recursive Merge Sort algorithm?
When the array has one or zero elements, it is already sorted, so recursion stops.
Click to reveal answer
intermediate
How does Merge Sort handle the original array during sorting?
It does not sort in place; it creates temporary arrays during the merge step to hold sorted elements before copying them back.
Click to reveal answer
What is the time complexity of Merge Sort in the average case?
AO(n)
BO(n^2)
CO(log n)
DO(n log n)
✗ Incorrect
Merge Sort divides the array and merges in logarithmic steps, resulting in O(n log n) time.
Which step in Merge Sort is responsible for combining sorted arrays?
ADivide
BConquer
CMerge
DSort
✗ Incorrect
The merge step combines two sorted arrays into one sorted array.
What happens when the array size reaches 1 in Merge Sort?
AThe recursion stops because the array is sorted
BThe array is split further
CThe array is merged immediately
DThe array is reversed
✗ Incorrect
An array of size 1 is already sorted, so recursion stops.
Merge Sort is an example of which algorithm design technique?
ADivide and Conquer
BGreedy
CDynamic Programming
DBacktracking
✗ Incorrect
Merge Sort uses divide and conquer by splitting and merging.
Which of the following is a disadvantage of Merge Sort?
AIt is unstable
BIt uses extra memory for merging
CIt has worst-case O(n^2) time
DIt cannot be implemented recursively
✗ Incorrect
Merge Sort requires extra space for temporary arrays during merging.
Explain how Merge Sort uses the divide and conquer approach to sort an array.
Think about splitting, sorting, and merging steps.
You got /4 concepts.
Describe the merge step in Merge Sort and why it is important.
Focus on how two sorted parts become one sorted whole.
You got /4 concepts.
Practice
(1/5)
1. What is the main idea behind the Merge Sort algorithm?
easy
A. Select a pivot and partition the array around it
B. Sort the array by repeatedly swapping adjacent elements
C. Divide the array into halves, sort each half, then merge them
D. Insert elements one by one into a sorted list
Solution
Step 1: Understand the divide and conquer approach
Merge Sort splits the array into two halves recursively until single elements remain.
Step 2: Merge sorted halves
After splitting, it merges the halves back in sorted order to form the sorted array.
Final Answer:
Divide the array into halves, sort each half, then merge them -> Option C
Quick Check:
Merge Sort = Divide, sort halves, merge [OK]
Hint: Remember: split, sort halves, then merge [OK]
Common Mistakes:
Confusing Merge Sort with Bubble Sort
Thinking Merge Sort uses a pivot like Quick Sort
Believing Merge Sort sorts in place without merging
2. Which of the following is the correct base case condition in a typical Merge Sort implementation in C++?
easy
A. if (start > end) return;
B. if (start < end) return;
C. if (start == end + 1) return;
D. if (start >= end) return;
Solution
Step 1: Identify when to stop recursion
The base case is when the subarray has one or zero elements, meaning start index is greater or equal to end index.
Step 2: Match condition to code
The condition if (start >= end) return; correctly stops recursion when the subarray cannot be divided further.
Final Answer:
if (start >= end) return; -> Option D
Quick Check:
Base case = start >= end [OK]
Hint: Stop recursion when start is not less than end [OK]
Common Mistakes:
Using start > end misses single element subarray
Using start == end + 1 is incorrect indexing
Using start < end returns too early
3. What will be the output of the following C++ code snippet using Merge Sort on array {4, 1, 3, 2}?
void merge(int arr[], int l, int m, int r) {
int n1 = m - l + 1, n2 = r - m;
int L[n1], R[n2];
for (int i = 0; i < n1; i++) L[i] = arr[l + i];
for (int j = 0; j < n2; j++) R[j] = arr[m + 1 + j];
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) arr[k++] = L[i++];
else arr[k++] = R[j++];
}
while (i < n1) arr[k++] = L[i++];
while (j < n2) arr[k++] = R[j++];
}
void mergeSort(int arr[], int l, int r) {
if (l >= r) return;
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
int main() {
int arr[] = {4, 1, 3, 2};
int n = 4;
mergeSort(arr, 0, n - 1);
for (int i = 0; i < n; i++) std::cout << arr[i] << " ";
return 0;
}
medium
A. 1 2 3 4
B. 4 3 2 1
C. 1 3 2 4
D. 2 1 3 4
Solution
Step 1: Trace recursive splitting and merging
The array splits into [4,1] and [3,2], then further into single elements. Each pair is merged sorted: [1,4] and [2,3].
Step 2: Final merge
Merging [1,4] and [2,3] results in [1,2,3,4]. The output prints this sorted array.
Final Answer:
1 2 3 4 -> Option A
Quick Check:
Sorted array = 1 2 3 4 [OK]
Hint: Merge Sort always outputs sorted array [OK]
Common Mistakes:
Confusing merge order causing wrong output
Forgetting to merge after recursive calls
Printing array before sorting completes
4. Identify the bug in this Merge Sort merge function snippet:
void merge(int arr[], int l, int m, int r) {
int n1 = m - l + 1, n2 = r - m;
int L[n1], R[n2];
for (int i = 0; i <= n1; i++) L[i] = arr[l + i];
for (int j = 0; j < n2; j++) R[j] = arr[m + 1 + j];
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) arr[k++] = L[i++];
else arr[k++] = R[j++];
}
while (i < n1) arr[k++] = L[i++];
while (j < n2) arr[k++] = R[j++];
}
medium
A. The loop 'for (int i = 0; i <= n1; i++)' causes out-of-bounds access
B. The merge condition should be 'L[i] < R[j]' instead of '<='
C. The arrays L and R should be dynamically allocated
D. The indices i and j should start from 1, not 0
Solution
Step 1: Check loop bounds for copying left array
The loop uses 'i <= n1', which runs one extra iteration causing out-of-bounds access since valid indices are 0 to n1-1.
Step 2: Correct loop condition
The loop should be 'i < n1' to copy exactly n1 elements without overflow.
Final Answer:
The loop 'for (int i = 0; i <= n1; i++)' causes out-of-bounds access -> Option A
Quick Check:
Loop bounds must be less than array size [OK]
Hint: Check array loops use < not <= for indexing [OK]
Common Mistakes:
Using <= instead of < in loops
Starting indices at 1 instead of 0
Ignoring dynamic allocation but it's not mandatory here
5. Given an array {5, 3, 8, 6, 2, 7, 4, 1}, how many total merge operations will be performed during a full Merge Sort?
hard
A. 15
B. 7
C. 8
D. 4
Solution
Step 1: Understand merge operations in Merge Sort
Merge Sort splits the array until single elements, then merges pairs stepwise. For n=8 elements, merges happen at each level combining subarrays.
Step 2: Calculate total merges
Number of merges = n - 1 = 8 - 1 = 7 merges in total to combine all elements into one sorted array.
Final Answer:
7 -> Option B
Quick Check:
Total merges = n - 1 = 7 [OK]
Hint: Total merges in Merge Sort = array size minus one [OK]
Common Mistakes:
Counting merges as number of elements
Confusing merges with recursive calls
Assuming merges double at each level
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.