Bird
Raised Fist0
DSA Goprogramming~10 mins

Radix Sort Algorithm in DSA Go - Execution Trace

Choose your learning style10 modes available
Concept Flow - Radix Sort Algorithm
Find max number to know digit count
↓
Start with least significant digit
↓
Distribute numbers into buckets by digit
↓
Collect numbers from buckets in order
↓
Move to next significant digit
↓
Repeat until all digits processed
↓
Sorted array
Radix Sort processes numbers digit by digit from least to most significant, grouping and collecting them repeatedly until fully sorted.
Execution Sample
DSA Go
arr := []int{170, 45, 75, 90, 802, 24, 2, 66}
max := 802
digit := 1
for max/digit > 0 {
  // distribute and collect by digit
  digit *= 10
}
Sorts the array by processing each digit place from least to most significant.
Execution Table
StepOperationDigit PlaceBuckets (0-9)Array After CollectionVisual State
1Find max number---[170, 45, 75, 90, 802, 24, 2, 66]
2Distribute by 1's digit1 (units)[[170, 90], [], [802, 2], [], [24], [45, 75], [66], [], [], []][170, 90, 802, 2, 24, 45, 75, 66]Buckets show numbers grouped by units digit
3Distribute by 10's digit10 (tens)[[802, 2], [], [24], [], [45], [], [66], [170, 75], [], [90]][802, 2, 24, 45, 66, 170, 75, 90]Buckets show numbers grouped by tens digit
4Distribute by 100's digit100 (hundreds)[[2, 24, 45, 66, 75, 90], [170], [], [], [], [], [], [], [802], []][2, 24, 45, 66, 75, 90, 170, 802]Buckets show numbers grouped by hundreds digit
5Check next digit (1000's)1000[[], [], [], [], [], [], [], [], [], []][2, 24, 45, 66, 75, 90, 170, 802]No more digits, sorting complete
💡 No more digits to process as max/digit <= 0, sorting finished
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
arr[170, 45, 75, 90, 802, 24, 2, 66][170, 90, 802, 2, 24, 45, 75, 66][802, 2, 24, 45, 66, 170, 75, 90][2, 24, 45, 66, 75, 90, 170, 802][2, 24, 45, 66, 75, 90, 170, 802]
digit11010010001000
max802802802802802
Key Moments - 3 Insights
Why do we start sorting from the least significant digit, not the most significant?
Starting from the least significant digit ensures stable sorting at each step, preserving order from previous digits as shown in steps 2 and 3 where the array order refines progressively.
What happens if a digit place has no numbers in some buckets?
Empty buckets simply mean no numbers have that digit; they are skipped during collection, as seen in step 3 where some buckets are empty but the array collects numbers in order.
Why does the sorting stop after processing the highest digit of the max number?
Because beyond the highest digit place, all digits are zero, so no further changes occur, as shown in step 5 where no new distribution happens and sorting completes.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at Step 3, what is the array after collection?
A[802, 2, 24, 45, 66, 170, 75, 90]
B[170, 90, 802, 2, 24, 75, 45, 66]
C[2, 24, 45, 66, 75, 90, 170, 802]
D[170, 45, 75, 90, 802, 24, 2, 66]
💡 Hint
Check the 'Array After Collection' column for Step 3 in the execution_table.
At which step does the digit place change from 10 to 100?
AStep 3
BStep 4
CStep 2
DStep 5
💡 Hint
Look at the 'Digit Place' column in the execution_table to see when it changes to 100.
If the max number was 99 instead of 802, how many digit places would the algorithm process?
A1
B3
C2
D4
💡 Hint
Refer to the 'max' variable in variable_tracker and how digit places relate to max/digit > 0.
Concept Snapshot
Radix Sort processes numbers digit by digit from least to most significant.
It uses buckets (0-9) to group numbers by current digit.
After distributing, numbers are collected in order.
Repeat for each digit until max digit processed.
Stable sorting at each step preserves order.
Efficient for sorting integers with known digit length.
Full Transcript
Radix Sort works by sorting numbers starting from the least significant digit to the most significant digit. First, it finds the maximum number to know how many digits to process. Then, for each digit place (units, tens, hundreds, etc.), it distributes numbers into buckets based on that digit. After distribution, it collects numbers from buckets in order, forming a partially sorted array. This process repeats for each digit place until all digits of the maximum number are processed. The sorting stops when no more digits remain. This method ensures stable sorting and efficiently sorts integers by digit grouping.

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

  1. 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.
  2. 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.
  3. Final Answer:

    Sort numbers by processing individual digits from least to most significant -> Option B
  4. 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

  1. 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.
  2. Step 2: Choose correct slice initialization

    Using make([][]int, 10) creates a slice of 10 slices, perfect for buckets 0-9.
  3. Final Answer:

    buckets := make([][]int, 10) -> Option C
  4. 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

  1. 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.
  2. Step 2: Trace final sorted array

    The final sorted array is ascending: [2, 24, 45, 66, 75, 90, 170, 802].
  3. Final Answer:

    [2 24 45 66 75 90 170 802] -> Option D
  4. Quick Check:

    Radix Sort output = Sorted ascending array [OK]
Hint: Radix Sort outputs sorted array ascending [OK]
Common Mistakes:
  • Confusing order of digits processed
  • Misreading output as original array
  • Mixing up output with descending order
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

  1. Step 1: Check order of placing elements in output

    To maintain stable sorting, elements must be placed from right to left (backwards) in output.
  2. 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.
  3. Final Answer:

    The last for loop should iterate backwards from n-1 to 0 -> Option A
  4. 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

  1. Step 1: Handle varying string lengths

    Pad strings with leading zeros so all have equal length, ensuring digit positions align.
  2. 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.
  3. Final Answer:

    Pad all strings with leading zeros to equal length, then sort digit by digit from right to left -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard