1 package main 2 import ( 3 "fmt" 4 ) 5 6 type Radix struct { 7 length int //序列中最大数的位数 8 radix [][]int //0-9的10个桶 9 nums []int //要排序的序列 10 } 11 //初始化排序的相关参数 12 func (r *Radix ) Init(numbers []int) { 13 r.nums = numbers 14 r.getLen() 15 } 16 //获取序列最大数的位数 17 func (r *Radix) getLen() { 18 size := len(r.nums) 19 max := r.nums[0] 20 for i := 1; i < size; i++ { 21 if r.nums[i] > max { 22 max = r.nums[i] 23 } 24 } 25 r.length = 1 26 max = max / 10 27 for max > 0 { 28 r.length++ 29 max = max / 10 30 } 31 } 32 //输出序列 33 func (r *Radix) Display() { 34 for _, v := range r.nums { 35 fmt.Printf("%d\t", v) 36 } 37 fmt.Print("\n") 38 } 39 //排序函数 40 func (r *Radix) Sort() { 41 size := len(r.nums) 42 var i, j, k int 43 m := 1 44 for i = 1; i <= r.length; i++ { //循环次数为常数,即序列中最大数的位数 45 r.radix = make([][]int, 10) 46 for j = 0; j < 10; j++ { //初始化0-9各位桶 47 r.radix[j] = make([]int, 0) 48 } 49 for j = 0; j < size; j++ { //遍历要排序的序列,将相应位数的元素加入到对应的位桶中 50 k = r.nums[j] / m % 10 51 r.radix[k] = append(r.radix[k], r.nums[j]) 52 } 53 r.nums = make([]int, 0) //清空原序列数组 54 for j = 9; j >= 0; j-- { //将9-0各位桶的数重新组装放到原序列数组当中 55 r.nums = append(r.nums, r.radix[j]...) 56 } 57 m = m * 10 58 r.Display() 59 } 60 61 62 } 63 64 65 func main() { 66 r := new(Radix) 67 r.Init([]int{430, 122, 332, 167, 899, 998, 455, 691, 571}) 68 r.Sort() 69 }