package main
import (
"fmt"
"math"
"math/rand"
"time"
)
const ( //常量
min, max = 0, 1000
)
var (
A []int
s [][][]int
n, d int
)
func Init() bool { //初始化切片
if n > 0 {
rand := rand.New(rand.NewSource(time.Now().UnixNano())) //时间种子
for i := 0; i < n; i++ {
A = append(A, (rand.Intn(max-min) + min)) //生成随机数
}
for i := 0; i < d; i++ {
var s2 [][]int
for j := 0; j < 10; j++ {
s1 := make([]int, 0)
s2 = append(s2, s1)
}
s = append(s, s2)
}
return true
} else {
return false
}
}
func Radix_Sort() {
for i := 0; i < d; i++ {
if i == 0 {
for j := 0; j < n; j++ {
k := A[j] % 10
s[i][k] = append(s[i][k], A[j])
}
} else {
for j := 0; j < 10; j++ {
l := len(s[i-1][j])
for p := 0; p < l; p++ {
k := s[i-1][j][p] / (int)(math.Pow10(i)) % 10
s[i][k] = append(s[i][k], s[i-1][j][p])
}
}
}
}
}
func Write_To_A() {
count := 0
for i := 0; i < 10; i++ {
l := len(s[d-1][i])
for p := 0; p < l; p++ {
A[count] = s[d-1][i][p]
count = count + 1
}
}
}
func main() {
fmt.Println("请输入元素的个数以及最大位数:")
fmt.Scanln(&n, &d)
if Init() {
fmt.Println(A)
t1 := time.Now()
Radix_Sort()
Write_To_A()
fmt.Println(A)
elapsed := time.Since(t1)
fmt.Println("运行时间: ", elapsed)
} else {
fmt.Println("你输入的数据存在错误\a")
}
}
Go语言写基数排序
最新推荐文章于 2022-10-23 23:19:03 发布