📖 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 called packageNumbers with the exact values: 170, 45, 75, 90, 802, 24, 2, 66
Create an integer variable called maxNumber to store the maximum number in packageNumbers
Implement the Radix Sort logic using a while loop and sorting by digit place
Print the sorted list packageNumbers after sorting
💡 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 of integers called packageNumbers with these exact values: 170, 45, 75, 90, 802, 24, 2, 66.
DSA C#
Hint
Use List<int> and initialize it with the exact numbers inside curly braces.
2
Find the maximum number in the list
Create an integer variable called maxNumber and set it to the maximum value in packageNumbers using packageNumbers.Max().
DSA C#
Hint
Use packageNumbers.Max() to find the largest number.
3
Implement Radix Sort logic
Write a while loop that runs while exp (starting at 1) is less than or equal to maxNumber. Inside the loop, call a method CountingSortByDigit(packageNumbers, exp) to sort by the current digit, then multiply exp by 10.
DSA C#
Hint
Use a while loop with exp starting at 1. Call CountingSortByDigit(packageNumbers, exp) inside the loop, then multiply exp by 10.
4
Print the sorted list
Print the sorted packageNumbers list using Console.WriteLine(string.Join(", ", packageNumbers)).
DSA C#
Hint
Use Console.WriteLine(string.Join(", ", packageNumbers)) to print the sorted list.
Practice
(1/5)
1. What is the main idea behind the Radix Sort Algorithm?
easy
A. Sort numbers digit by digit starting from the least significant digit
B. Sort numbers by comparing each pair directly
C. Sort numbers by dividing them into two halves recursively
D. Sort numbers by swapping adjacent elements repeatedly
Solution
Step 1: Understand Radix Sort approach
Radix Sort sorts numbers by processing each digit separately, starting from the least significant digit (rightmost).
Step 2: Compare with other sorting methods
Unlike comparison-based sorts, Radix Sort uses digit positions to sort without direct comparisons between whole numbers.
Final Answer:
Sort numbers digit by digit starting from the least significant digit -> Option A
Quick Check:
Radix Sort = Digit by digit sorting [OK]
Hint: Radix Sort processes digits from right to left [OK]
Assuming it sorts from most significant digit first
2. Which of the following is the correct way to initialize a queue in C# for use in Radix Sort?
easy
A. Queue<int> buckets = new Queue<int>[10];
B. Queue<int> buckets = new Queue<int>(10);
C. Queue buckets = new Queue<int>(10);
D. Queue<int>[] buckets = new Queue<int>[10];
Solution
Step 1: Understand array of queues declaration
We need an array of 10 queues, so the correct syntax is an array of Queue<int>: Queue<int>[] buckets = new Queue<int>[10];
Step 2: Check other options
Queue<int> buckets = new Queue<int>[10]; tries to assign an array to a single Queue<int> variable, which is invalid. Queue buckets = new Queue<int>(10); uses non-generic Queue incorrectly. Queue<int> buckets = new Queue<int>(10); creates a single Queue with capacity 10, not an array.
Final Answer:
Queue<int>[] buckets = new Queue<int>[10]; -> Option D
Quick Check:
Array of queues = Queue<int>[] [OK]
Hint: Use [] to declare array of queues in C# [OK]
Common Mistakes:
Declaring a single queue instead of an array
Using non-generic Queue instead of Queue<int>
Confusing array initialization syntax
3. What will be the output of the following C# code snippet using Radix Sort on the array [170, 45, 75, 90, 802, 24, 2, 66]?
Radix Sort sorts numbers by digits from least significant to most significant. After sorting, the array becomes sorted in ascending order: 2, 24, 45, 66, 75, 90, 170, 802.
Step 2: Verify output matches sorted array
[2, 24, 45, 66, 75, 90, 170, 802] matches the sorted array. [170, 45, 75, 90, 802, 24, 2, 66] is original unsorted. [802, 170, 90, 75, 66, 45, 24, 2] is descending order. [24, 2, 45, 66, 75, 90, 170, 802] is incorrect order.
4. Identify the error in this Radix Sort code snippet in C#:
for (int i = 0; i < maxDigit; i++)
{
Queue<int>[] buckets = new Queue<int>[10];
for (int j = 0; j < 10; j++)
buckets[j] = new Queue<int>();
foreach (int num in arr)
{
int digit = (num / (int)Math.Pow(10, i)) % 10;
buckets[digit].Enqueue(num);
}
int index = 0;
foreach (var bucket in buckets)
{
while (bucket.Count > 0)
arr[index++] = bucket.Dequeue();
}
}
medium
A. The inner foreach loop should use a for loop instead
B. The digit calculation is incorrect; it should use modulus 100
C. There is no error in the code snippet
D. The buckets array is reinitialized inside the outer loop, causing loss of data
Solution
Step 1: Analyze the code structure
The code correctly creates fresh buckets for each digit position, distributes all elements by the current digit using stable queues, and reconstructs the array in place. This is proper LSD Radix Sort implementation.
Step 2: Evaluate options
A: foreach loops are fine for iterating arr and buckets. B: (num / pow(10,i)) % 10 correctly extracts the i-th digit from LSD. C: Reinitializing buckets each pass prevents carry-over from previous passes and does not lose data since all elements are re-enqueued from arr every iteration.
Final Answer:
There is no error in the code snippet -> Option C
Quick Check:
Buckets reinitialized each pass = Correct [OK]
Hint: Buckets reset each digit pass is required, not an error [OK]
Common Mistakes:
Thinking buckets reinitialization causes data loss
Misunderstanding digit extraction formula
Resetting index inside wrong loop
5. You want to adapt Radix Sort to sort an array of strings representing numbers with varying lengths (e.g., ["170", "45", "9", "802", "24"]). Which approach is best to handle different string lengths correctly?
hard
A. Pad shorter strings with leading zeros to match the longest length before sorting
B. Sort strings as they are without padding, digit by digit from left to right
C. Convert strings to integers and apply normal Radix Sort
D. Sort strings by length first, then apply Radix Sort on digits
Solution
Step 1: Understand problem with varying string lengths
Radix Sort requires uniform digit positions. Strings of different lengths cause misalignment when sorting digit by digit.
Step 2: Choose padding strategy
Padding shorter strings with leading zeros makes all strings equal length, allowing digit-by-digit sorting from right to left correctly.
Step 3: Evaluate other options
Sort strings as they are without padding, digit by digit from left to right sorts left to right which breaks Radix Sort logic. Convert strings to integers and apply normal Radix Sort loses string format and may cause overflow. Sort strings by length first, then apply Radix Sort on digits sorting by length first does not solve digit alignment.
Final Answer:
Pad shorter strings with leading zeros to match the longest length before sorting -> Option A
Quick Check:
Pad strings to equal length = Correct approach [OK]
Hint: Pad strings with zeros to equal length before sorting [OK]
Common Mistakes:
Sorting strings without padding causes wrong order
Sorting digits left to right breaks Radix Sort
Converting strings to int may cause errors with large numbers
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.