📖 Scenario: You are working on a small app that sorts a list of numbers efficiently. You will implement the Shell Sort algorithm step-by-step to understand how it works.
🎯 Goal: Build a JavaScript program that sorts an array of numbers using the Shell Sort algorithm and prints the sorted array.
📋 What You'll Learn
Create an array called numbers with the exact values: [23, 12, 1, 8, 34, 54, 2, 3]
Create a variable called n that stores the length of the numbers array
Implement the Shell Sort algorithm using a while loop to reduce the gap and a nested for loop to sort elements
Print the sorted numbers array at the end
💡 Why This Matters
🌍 Real World
Shell Sort is used in situations where a simple, efficient sorting algorithm is needed for medium-sized arrays, such as sorting user data or small datasets in web apps.
💼 Career
Understanding Shell Sort helps in grasping how sorting algorithms optimize performance, which is useful for software developers working on data processing and optimization tasks.
Progress0 / 4 steps
1
Create the initial array
Create an array called numbers with these exact values: [23, 12, 1, 8, 34, 54, 2, 3]
DSA Javascript
Hint
Use const numbers = [23, 12, 1, 8, 34, 54, 2, 3]; to create the array.
2
Set up the length and initial gap
Create a variable called n that stores the length of the numbers array and create a variable called gap initialized to Math.floor(n / 2)
DSA Javascript
Hint
Use const n = numbers.length; and let gap = Math.floor(n / 2);
3
Implement the Shell Sort core logic
Write a while loop that runs while gap > 0. Inside it, write a for loop with variable i from gap to n. Inside the for loop, create a variable temp equal to numbers[i] and a variable j equal to i. Then use a while loop to shift elements greater than temp by gap positions. After shifting, assign temp to numbers[j]. Finally, reduce gap by half using Math.floor(gap / 2).
DSA Javascript
Hint
Use nested loops: a while loop for gap, a for loop for index, and an inner while loop to shift elements.
4
Print the sorted array
Write a console.log(numbers) statement to print the sorted numbers array.
DSA Javascript
Hint
Use console.log(numbers); to print the sorted array.
Practice
(1/5)
1. What is the main idea behind the Shell Sort algorithm?
easy
A. It builds a heap and extracts the maximum element repeatedly.
B. It uses a divide and conquer approach like merge sort.
C. It sorts elements by repeatedly swapping adjacent elements only.
D. It sorts elements by comparing distant elements and gradually reducing the gap.
Solution
Step 1: Understand Shell Sort concept
Shell Sort improves insertion sort by comparing elements far apart, reducing the gap over iterations.
Step 2: Compare with other sorting methods
Unlike merge sort or heap sort, Shell Sort uses gap-based comparisons, not divide and conquer or heap structure.
Final Answer:
It sorts elements by comparing distant elements and gradually reducing the gap. -> Option D
Quick Check:
Shell Sort = gap-based comparisons [OK]
Hint: Shell Sort uses gaps to compare distant elements first [OK]
Common Mistakes:
Confusing Shell Sort with merge sort or quicksort
Thinking it only swaps adjacent elements like bubble sort
Assuming it uses a heap structure
2. Which of the following is the correct syntax to start the gap value in a Shell Sort implementation in JavaScript?
easy
A. let gap = Math.floor(array.length / 2);
B. let gap = array.length * 2;
C. let gap = 0;
D. let gap = array.length + 1;
Solution
Step 1: Identify typical gap initialization
Shell Sort usually starts with gap as half the array length, using Math.floor for integer division.
Step 2: Check each option
let gap = Math.floor(array.length / 2); correctly sets gap to half length; others set invalid or zero gaps.
Final Answer:
let gap = Math.floor(array.length / 2); -> Option A
Quick Check:
Gap starts at half array length [OK]
Hint: Start gap as half array length using Math.floor [OK]
Common Mistakes:
Setting gap to zero initially
Using gap larger than array length
Not using Math.floor for integer gap
3. What will be the output array after applying one full pass of Shell Sort with initial gap = 3 on the array [9, 8, 3, 7, 5, 6, 4, 1]?
medium
A. [9, 8, 3, 7, 5, 6, 4, 1]
B. [4, 8, 3, 1, 5, 6, 7, 9]
C. [4, 1, 3, 7, 5, 6, 9, 8]
D. [4, 8, 3, 7, 5, 6, 9, 1]
Solution
Step 1: Identify elements compared with gap 3
Elements compared are at indices (0,3,6) and (1,4,7) and (2,5). For example, 9 and 7 and 4; 8 and 5 and 1; 3 and 6.
Step 2: Perform insertion sort on these groups
Sorting group (9,7,4) gives (4,7,9), (8,5,1) gives (1,5,8), (3,6) stays (3,6). After rearranging, array becomes [4,1,3,7,5,6,9,8].
Final Answer:
[4, 1, 3, 7, 5, 6, 9, 8] -> Option C
Quick Check:
Gap 3 pass sorts distant elements [OK]
Hint: Group elements by gap and sort each group [OK]
Common Mistakes:
Not grouping elements by gap correctly
Sorting entire array instead of gap groups
Confusing indices during swaps
4. Identify the error in this Shell Sort snippet and choose the correct fix:
function shellSort(arr) {
let gap = Math.floor(arr.length / 2);
while (gap > 0) {
for (let i = gap; i < arr.length; i++) {
let temp = arr[i];
let j = i;
while (j >= gap && arr[j - gap] > temp) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = temp;
}
gap = gap / 2;
}
return arr;
}
medium
A. Change while (gap > 0) to while (gap >= 0)
B. Change gap = gap / 2; to gap = Math.floor(gap / 2);
C. Change let j = i; to let j = gap;
D. Remove the inner while loop
Solution
Step 1: Analyze gap update
The gap must be an integer; dividing by 2 without floor makes it a float, causing infinite loop.
Step 2: Fix gap update
Using Math.floor ensures gap reduces properly and loop ends.
Final Answer:
Change gap = gap / 2; to gap = Math.floor(gap / 2); -> Option B
Quick Check:
Gap must be integer to avoid infinite loop [OK]
Hint: Always floor gap after division to keep it integer [OK]
Common Mistakes:
Not flooring gap, causing infinite loop
Changing loop conditions incorrectly
Removing necessary inner loops
5. Given the array [23, 12, 1, 8, 34, 54, 2, 3], what will be the final sorted array after applying Shell Sort with gap sequence halving each time starting from Math.floor(length/2)?
hard
A. [1, 2, 3, 8, 12, 23, 34, 54]
B. [1, 3, 2, 8, 12, 23, 34, 54]
C. [23, 12, 1, 8, 34, 54, 2, 3]
D. [54, 34, 23, 12, 8, 3, 2, 1]
Solution
Step 1: Calculate initial gap and perform passes
Initial gap = 4. After sorting groups with gap 4, array partially sorted. Then gap = 2, then gap = 1 (final insertion sort).
Step 2: Final sorted array after all passes
After all gap passes, array becomes fully sorted ascending: [1, 2, 3, 8, 12, 23, 34, 54].
Final Answer:
[1, 2, 3, 8, 12, 23, 34, 54] -> Option A
Quick Check:
Shell Sort fully sorts array ascending [OK]
Hint: Shell Sort ends with gap 1 insertion sort for full sorting [OK]
Common Mistakes:
Stopping before gap reaches 1
Misordering elements in final pass
Confusing descending with ascending order
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.