📖 Scenario: You work in a warehouse where packages are labeled with numbers. You want to sort these package numbers quickly to organize shipments.
🎯 Goal: Build a program that sorts a list of package numbers using the Radix Sort algorithm.
📋 What You'll Learn
Create a list of integers representing package numbers
Create a variable to track the maximum number of digits
Implement the Radix Sort logic using counting sort by digit
Print the sorted list of package numbers
💡 Why This Matters
🌍 Real World
Sorting package numbers quickly helps warehouses organize shipments efficiently.
💼 Career
Understanding Radix Sort is useful for software engineers working on performance-critical sorting tasks.
Progress0 / 4 steps
1
Create the list of package numbers
Create a list called packages with these exact integers: 170, 45, 75, 90, 802, 24, 2, 66
DSA Go
Hint
Use packages := []int{170, 45, 75, 90, 802, 24, 2, 66} to create the list.
2
Find the maximum number in the list
Create a variable called maxNum and set it to the maximum value in the packages list using a simple loop
DSA Go
Hint
Start with maxNum := packages[0] and update it inside a for loop.
3
Implement Radix Sort logic
Write a loop that sorts packages by each digit place using counting sort logic. Use a variable exp starting at 1 and multiply by 10 each iteration until exp is greater than maxNum. Inside the loop, create a count array of size 10, count digits, and reorder packages accordingly.
DSA Go
Hint
Use a loop with exp starting at 1 and multiply by 10 each time. Use counting sort steps inside.
4
Print the sorted list
Write a print statement to display the sorted packages list
DSA Go
Hint
Use fmt.Println(packages) to print the sorted list.
Practice
(1/5)
1. What is the main idea behind the Radix Sort Algorithm?
easy
A. Sort numbers by dividing the list into halves recursively
B. Sort numbers by processing individual digits from least to most significant
C. Sort numbers by comparing each pair directly
D. Sort numbers by swapping adjacent elements repeatedly
Solution
Step 1: Understand Radix Sort approach
Radix Sort sorts numbers by grouping digits and sorting them digit by digit, starting from the least significant digit.
Step 2: Compare with other sorting methods
Unlike comparison-based sorts (like bubble or merge sort), Radix Sort processes digits individually without direct element comparisons.
Final Answer:
Sort numbers by processing individual digits from least to most significant -> Option B
Quick Check:
Radix Sort = Digit-wise sorting [OK]
Hint: Radix Sort sorts digits from right to left [OK]
Common Mistakes:
Thinking Radix Sort compares elements directly
Confusing Radix Sort with divide and conquer methods
Assuming it swaps adjacent elements like bubble sort
2. Which of the following is the correct way to initialize a slice of buckets for Radix Sort in Go?
easy
A. buckets := [][]int{}
B. buckets := make([]int, 10)
C. buckets := make([][]int, 10)
D. buckets := [10]int{}
Solution
Step 1: Identify bucket type needed
Radix Sort uses buckets to hold multiple integers per digit, so each bucket must be a slice of ints.
Step 2: Choose correct slice initialization
Using make([][]int, 10) creates a slice of 10 slices, perfect for buckets 0-9.
Final Answer:
buckets := make([][]int, 10) -> Option C
Quick Check:
Slice of slices for buckets = buckets := make([][]int, 10) [OK]
Hint: Buckets hold slices, so use [][]int with make [OK]
Common Mistakes:
Using single int slice instead of slice of slices
Using array instead of slice for dynamic buckets
Initializing empty slice without length
3. What will be the output of the following Go code snippet using Radix Sort on the array [170, 45, 75, 90, 802, 24, 2, 66]?
package main
import "fmt"
func main() {
arr := []int{170, 45, 75, 90, 802, 24, 2, 66}
radixSort(arr)
fmt.Println(arr)
}
func radixSort(arr []int) {
max := getMax(arr)
exp := 1
for max/exp > 0 {
countSort(arr, exp)
exp *= 10
}
}
func getMax(arr []int) int {
max := arr[0]
for _, v := range arr {
if v > max {
max = v
}
}
return max
}
func countSort(arr []int, exp int) {
n := len(arr)
output := make([]int, n)
count := make([]int, 10)
for i := 0; i < n; i++ {
index := (arr[i] / exp) % 10
count[index]++
}
for i := 1; i < 10; i++ {
count[i] += count[i-1]
}
for i := n - 1; i >= 0; i-- {
index := (arr[i] / exp) % 10
output[count[index]-1] = arr[i]
count[index]--
}
for i := 0; i < n; i++ {
arr[i] = output[i]
}
}
medium
A. [2 24 45 66 75 90 802 170]
B. [802 170 90 75 66 45 24 2]
C. [170 45 75 90 802 24 2 66]
D. [2 24 45 66 75 90 170 802]
Solution
Step 1: Understand Radix Sort process on given array
Radix Sort sorts by digits from least significant to most significant. After sorting by units, tens, and hundreds place, the array becomes sorted.
Step 2: Trace final sorted array
The final sorted array is ascending: [2, 24, 45, 66, 75, 90, 170, 802].
4. Identify the bug in this Radix Sort countSort function snippet in Go:
func countSort(arr []int, exp int) {
n := len(arr)
output := make([]int, n)
count := make([]int, 10)
for i := 0; i < n; i++ {
index := (arr[i] / exp) % 10
count[index]++
}
for i := 1; i < 10; i++ {
count[i] += count[i-1]
}
for i := 0; i < n; i++ {
index := (arr[i] / exp) % 10
output[count[index]-1] = arr[i]
count[index]--
}
for i := 0; i < n; i++ {
arr[i] = output[i]
}
}
medium
A. The last for loop should iterate backwards from n-1 to 0
B. The count array size should be 100 instead of 10
C. The output slice should be initialized with zeros explicitly
D. The index calculation should use modulo 100 instead of 10
Solution
Step 1: Check order of placing elements in output
To maintain stable sorting, elements must be placed from right to left (backwards) in output.
Step 2: Identify incorrect loop direction
The code uses a forward loop (0 to n-1) which breaks stability; it should loop from n-1 down to 0.
Final Answer:
The last for loop should iterate backwards from n-1 to 0 -> Option A
Quick Check:
Stable sort needs backward loop [OK]
Hint: Place elements backward to keep stable order [OK]
Common Mistakes:
Looping forward breaks stability
Changing count array size unnecessarily
Misunderstanding index calculation
5. You want to sort a list of strings representing numbers with varying lengths using Radix Sort in Go. Which approach correctly adapts Radix Sort for this case?
hard
A. Pad all strings with leading zeros to equal length, then sort digit by digit from right to left
B. Sort strings by length first, then apply Radix Sort on digits from left to right
C. Convert strings to integers and apply normal Radix Sort directly
D. Use Radix Sort only on the first character of each string
Solution
Step 1: Handle varying string lengths
Pad strings with leading zeros so all have equal length, ensuring digit positions align.
Step 2: Apply Radix Sort digit by digit from right to left
After padding, sort from least significant digit (rightmost) to most significant (leftmost) to maintain correct order.
Final Answer:
Pad all strings with leading zeros to equal length, then sort digit by digit from right to left -> Option A
Quick Check:
Padding equalizes length for Radix Sort [OK]
Hint: Pad strings to same length before sorting digits [OK]
Common Mistakes:
Sorting by length first breaks digit alignment
Converting strings to int may overflow or lose leading zeros
Sorting only first character ignores full number
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.