0
0
DSA Goprogramming~20 mins

Radix Sort Algorithm in DSA Go - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Radix Sort Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of Radix Sort on a small array
What is the output of the following Go code that uses Radix Sort on the array [170, 45, 75, 90, 802, 24, 2, 66]?
DSA Go
package main

import (
	"fmt"
)

func countingSort(arr []int, exp int) []int {
	output := make([]int, len(arr))
	count := make([]int, 10)

	for i := 0; i < len(arr); i++ {
		index := (arr[i] / exp) % 10
		count[index]++
	}

	for i := 1; i < 10; i++ {
		count[i] += count[i-1]
	}

	for i := len(arr) - 1; i >= 0; i-- {
		index := (arr[i] / exp) % 10
		output[count[index]-1] = arr[i]
		count[index]--
	}

	return output
}

func radixSort(arr []int) []int {
	max := arr[0]
	for _, v := range arr {
		if v > max {
			max = v
		}
	}

	exp := 1
	for max/exp > 0 {
		arr = countingSort(arr, exp)
		exp *= 10
	}
	return arr
}

func main() {
	arr := []int{170, 45, 75, 90, 802, 24, 2, 66}
	sorted := radixSort(arr)
	fmt.Println(sorted)
}
A[2 24 45 75 66 90 170 802]
B[802 170 90 75 66 45 24 2]
C[24 2 45 66 75 90 170 802]
D[2 24 45 66 75 90 170 802]
Attempts:
2 left
💡 Hint
Radix sort sorts numbers digit by digit starting from the least significant digit.
🧠 Conceptual
intermediate
1:00remaining
Number of passes in Radix Sort
If you apply Radix Sort to sort the array [3, 123, 45, 9, 1000], how many passes (iterations over digits) will the algorithm perform?
A3
B4
C5
D2
Attempts:
2 left
💡 Hint
Count the number of digits in the largest number.
🔧 Debug
advanced
1:30remaining
Identify the error in this Radix Sort counting sort step
What error will this Go code produce when running the countingSort function inside Radix Sort?
DSA Go
func countingSort(arr []int, exp int) []int {
	output := make([]int, len(arr))
	count := make([]int, 10)

	for i := 0; i < len(arr); i++ {
		index := (arr[i] / exp) % 10
		count[index]++
	}

	for i := 1; i < 10; i++ {
		count[i] += count[i-1]
	}

	for i := len(arr) - 1; i >= 0; i-- {
		index := (arr[i] / exp) % 10
		output[count[index]-1] = arr[i]
		count[index]--
	}

	return output
}
Aruntime panic: index out of range
Bcompilation error: invalid for loop syntax
Cincorrect sorted output
Dno error, runs correctly
Attempts:
2 left
💡 Hint
Check the loop that updates the count array cumulative sums.
🚀 Application
advanced
1:30remaining
Radix Sort on negative numbers
Given the standard Radix Sort implementation that only works with non-negative integers, what will be the output if you run it on the array [-5, 3, 0, -2, 4]?
ARuntime error due to negative indexing
BSorted array: [-5, -2, 0, 3, 4]
CUnchanged array: [-5, 3, 0, -2, 4]
DIncorrect sorted array: [0, 3, 4, -5, -2]
Attempts:
2 left
💡 Hint
Radix Sort uses digits as indices; negative numbers cause issues.
Predict Output
expert
2:00remaining
Final array after partial Radix Sort passes
Given the array [329, 457, 657, 839, 436, 720, 355], what is the state of the array after the first pass (sorting by least significant digit) of Radix Sort?
DSA Go
package main

import (
	"fmt"
)

func countingSort(arr []int, exp int) []int {
	output := make([]int, len(arr))
	count := make([]int, 10)

	for i := 0; i < len(arr); i++ {
		index := (arr[i] / exp) % 10
		count[index]++
	}

	for i := 1; i < 10; i++ {
		count[i] += count[i-1]
	}

	for i := len(arr) - 1; i >= 0; i-- {
		index := (arr[i] / exp) % 10
		output[count[index]-1] = arr[i]
		count[index]--
	}

	return output
}

func main() {
	arr := []int{329, 457, 657, 839, 436, 720, 355}
	arr = countingSort(arr, 1)
	fmt.Println(arr)
}
A[839 720 436 355 657 457 329]
B[329 457 657 839 436 720 355]
C[720 355 436 457 657 329 839]
D[355 436 457 329 657 839 720]
Attempts:
2 left
💡 Hint
Look at the last digit of each number and sort accordingly.