📖 Scenario: You are helping a library organize its collection of book IDs. The IDs are numbers but are all mixed up. To find books quickly, the library wants the IDs sorted in ascending order.
🎯 Goal: Build a program that sorts a list of book IDs using the merge sort method. This method splits the list into smaller parts, sorts those parts, and then joins them back together in order.
📋 What You'll Learn
Create an array of book IDs
Create a helper function to merge two sorted arrays
Create the main mergeSort function using divide and conquer
Print the sorted array of book IDs
💡 Why This Matters
🌍 Real World
Sorting is used everywhere, like organizing books, arranging files, or showing search results quickly.
💼 Career
Understanding merge sort helps in jobs that require efficient data handling, like software development and data analysis.
Progress0 / 4 steps
1
Create the initial array of book IDs
Create an array called bookIDs with these exact numbers in this order: 34, 7, 23, 32, 5, 62
DSA Javascript
Hint
Use square brackets [] to create an array and separate numbers with commas.
2
Create a helper function to merge two sorted arrays
Create a function called merge that takes two arrays named left and right. It should return one sorted array by comparing elements from both arrays step by step.
DSA Javascript
Hint
Use two pointers i and j to track positions in left and right. Compare and add smaller elements to result.
3
Create the main mergeSort function using divide and conquer
Create a function called mergeSort that takes an array called arr. If the array length is 1 or less, return it. Otherwise, split arr into two halves called left and right, call mergeSort recursively on both halves, and return the merged result using the merge function.
DSA Javascript
Hint
Use slice to split the array and call mergeSort on each half before merging.
4
Print the sorted array of book IDs
Use console.log to print the result of calling mergeSort on the bookIDs array.
DSA Javascript
Hint
Use console.log(mergeSort(bookIDs)) to see the sorted array.
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 and conquer with merging [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 check in a recursive Merge Sort function in JavaScript?
easy
A. if (array.length <= 1) return array;
B. if (array.length === 0) return null;
C. if (array.length > 1) return array;
D. if (array.length === 2) return array;
Solution
Step 1: Identify the stopping condition for recursion
Merge Sort stops splitting when the array has 1 or 0 elements, as these are already sorted.
Step 2: Correct base case syntax
The check if (array.length <= 1) return array; correctly returns the array when it can't be split further.
Final Answer:
if (array.length <= 1) return array; -> Option A
Quick Check:
Base case = array length ≤ 1 [OK]
Hint: Base case: array length 1 or less returns array [OK]
Common Mistakes:
Returning null instead of the array
Checking for length === 2 instead of ≤ 1
Incorrectly returning array when length > 1
3. What will be the output of the following JavaScript code using Merge Sort?
function mergeSort(arr) {
if (arr.length <= 1) return arr;
const mid = Math.floor(arr.length / 2);
const left = mergeSort(arr.slice(0, mid));
const right = mergeSort(arr.slice(mid));
return merge(left, right);
}
function merge(left, right) {
let result = [];
let i = 0, j = 0;
while (i < left.length && j < right.length) {
if (left[i] < right[j]) {
result.push(left[i]);
i++;
} else {
result.push(right[j]);
j++;
}
}
return result.concat(left.slice(i)).concat(right.slice(j));
}
console.log(mergeSort([4, 1, 3, 2]));
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 the recursive splitting
The array [4,1,3,2] is split into [4,1] and [3,2], then further into single elements.
Step 2: Merge sorted halves step-by-step
Merge [4] and [1] to get [1,4], merge [3] and [2] to get [2,3], then merge [1,4] and [2,3] to get [1,2,3,4].
Final Answer:
[1, 2, 3, 4] -> Option A
Quick Check:
Sorted array = [1, 2, 3, 4] [OK]
Hint: Merge halves in sorted order to get final sorted array [OK]
Common Mistakes:
Confusing merge order and returning unsorted halves
Forgetting to merge remaining elements after loop
Incorrect slicing causing wrong splits
4. Identify the bug in this Merge Sort implementation snippet:
function mergeSort(arr) {
if (arr.length <= 1) return arr;
const mid = Math.floor(arr.length / 2);
const left = mergeSort(arr.slice(0, mid));
const right = mergeSort(arr.slice(mid));
return merge(left, right);
}
function merge(left, right) {
let result = [];
let i = 0, j = 0;
while (i < left.length || j < right.length) {
if (left[i] < right[j]) {
result.push(left[i]);
i++;
} else {
result.push(right[j]);
j++;
}
}
return result;
}
medium
A. The base case condition is incorrect
B. The while loop condition should use && instead of ||
C. The merge function does not return the result
D. The mid calculation is wrong
Solution
Step 1: Analyze the merge loop condition
The loop uses while (i < left.length || j < right.length), which can cause accessing undefined elements.
Step 2: Correct loop condition for safe merging
It should be while (i < left.length && j < right.length) to compare valid elements, then append leftovers after the loop.
Final Answer:
The while loop condition should use && instead of || -> Option B
Quick Check:
Use && in merge loop condition [OK]
Hint: Use && to avoid undefined element access in merge loop [OK]
Common Mistakes:
Using || causes runtime errors accessing undefined
Not appending leftover elements after loop
Ignoring base case correctness
5. Given an array with many duplicate values, how can you modify the merge step in Merge Sort to ensure stable sorting (preserving original order of equal elements)?
hard
A. Randomly pick from left or right when elements are equal
B. When elements are equal, always take the element from the right array first
C. Skip equal elements during merge to avoid duplicates
D. When elements are equal, always take the element from the left array first
Solution
Step 1: Understand stable sorting in merge
Stable sorting means equal elements keep their original order after sorting.
Step 2: Modify merge to preserve order
When left[i] equals right[j], choose left[i] first to keep its original position before right[j].
Final Answer:
When elements are equal, always take the element from the left array first -> Option D
Quick Check:
Stable merge = pick left element first on ties [OK]
Hint: Pick left element first when equal to keep order stable [OK]
Common Mistakes:
Picking right element first breaks stability
Skipping duplicates loses data
Random choice causes unstable sort
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.