使用Golang编写的基数排序算法

使用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中,我们可以使用上述代码实现基数排序算法的功能。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程