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)) }
原文:https://www.cnblogs.com/xcx-bwt/p/14238587.html