package main
import (
"fmt"
)
func SelectSortMax(arr []int) int {
arrLen := len(arr)
if arrLen <= 1 {
return arr[0]
}else {
max := arr[0]
for i, _ := range arr{
if arr[i] > max {
max = arr[i]
}
}
return max
}
}
func RadixSort(arr []int) []int {
max := SelectSortMax(arr)
for bit := 1; max / bit > 0; bit *= 10 {
arr = BitSort(arr, bit)
fmt.Println(arr)
}
return arr
}
func BitSort(arr[]int, bit int) []int {
arrLen := len(arr)
bitcounts := make([]int, 10)
for i := 0; i < arrLen; i++ {
num := (arr[i]/bit) % 10
bitcounts[num]++
}
for i := 1; i < 10; i++ {
bitcounts[i]+= bitcounts[i-1]
}
tmp := make([]int, arrLen)
for i := arrLen - 1; i >= 0; i-- {
num := (arr[i] / bit) % 10
tmp[bitcounts[num] - 1] = arr[i]
bitcounts[num]--
}
for i := 0; i < arrLen; i++ {
arr[i] = tmp[i]
}
return arr
}
func main() {
arr := []int{11, 91, 222, 348, 878, 348, 7123, 4213, 6232, 1011, 1011, 1011, 1011, 1011, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123, 7123}
fmt.Println(RadixSort(arr))
}