使用Golang编写的基数排序算法
什么是基数排序算法
基数排序算法是一种非比较性算法,它根据数字的每一位上的数值进行排序。其基本思想是从最低位开始,按照每个数位上的数值将数据分组,然后将这些分组按照数值大小重新组合,直到最高位。在排序过程中需要使用桶来存放数据,桶的个数为基数的个数。
基数排序算法实现
在Golang中,我们可以使用以下代码实现基数排序算法:
package main
import (
"fmt"
"math"
)
func RadixSort(arr []int) []int {
maxNum := getMax(arr)
for exp := 1; maxNum/exp > 0; exp *= 10 {
arr = countSort(arr, exp)
}
return arr
}
func getMax(arr []int) int {
max := math.MinInt32
for _, v := range arr {
if v > max {
max = v
}
}
return max
}
func countSort(arr []int, exp int) []int {
n := len(arr)
output := make([]int, n)
count := make([]int, 10)
for i := 0; i < n; i++ {
index := (arr[i] / exp) % 10
count[index]++
}
for i := 1; i < 10; i++ {
count[i] += count[i-1]
}
for i := n - 1; i >= 0; i-- {
index := (arr[i] / exp) % 10
output[count[index]-1] = arr[i]
count[index]--
}
for i := 0; i < n; i++ {
arr[i] = output[i]
}
return arr
}
func main() {
arr := []int{64, 34, 25, 12, 22, 11, 90}
fmt.Println("排序前:", arr)
arr = RadixSort(arr)
fmt.Println("排序后:", arr)
}
代码解释:
RadixSort是基数排序算法的实现函数,参数为待排序的数组,返回排序后的数组。getMax函数用于获取数组中的最大值。countSort函数是计数排序的实现,用于根据某个数位上的值对数组进行排序。main函数是程序入口函数,用于测试基数排序算法的实现。
测试结果分析
我们将下面的数组进行排序:
arr := []int{64, 34, 25, 12, 22, 11, 90}
排序前的数组为:
排序前: [64 34 25 12 22 11 90]
经过基数排序算法排序后的数组为:
排序后: [11 12 22 25 34 64 90]
可以看到,基数排序算法能够正确地将数组排序。
结论
基数排序算法是一种非比较性算法,能够对数组进行排序。在Golang中,我们可以使用上述代码实现基数排序算法的功能。
极客笔记