Go语言程序实现基数排序(降序排列整数)
基数排序是一种非比较排序算法,它通过根据数字的有效位数将元素分配到不同的桶中来工作。在本文中,我们将探讨一个 Go 语言程序,该程序实现基数排序以按降序排列整数。这里我们将使用三种不同的方法:Getmax、countsort 和 radixsort,并结合示例来阐述这个概念。
语法
func getMax(arr []int) int
语法 "func getMax(arr []int) int" 定义了一个名为 "getMax" 的函数,它接受一个整数切片作为参数并返回一个整数值。
func countSort(arr []int, exp int)
语法 "func countSort(arr []int, exp int)" 定义了一个名为 "countSort" 的函数,它接受两个参数:一个名为 "arr" 的整数切片和一个名为 "exp" 的整数。
func radixSort(arr []int)
语法 "func radixSort(arr []int)" 定义了一个名为 "radixSort" 的函数,它接受一个参数:一个名为 "arr" 的整数切片。
算法
首先定义一个名为 RadixSort 的函数,该函数接受一个整数数组作为输入。
在输入数组中找到最大元素以确定最大数字中的位数。让我们将此值称为 max。
遍历每个数字位置,从最低有效位到最高有效位。
在每次迭代中,创建 10 个桶(0 到 9)以根据当前位置的数字值临时存储整数。
遍历输入数组中的每个整数,并根据当前位置的数字值将其分配到相应的桶中。
将所有整数分配到桶中后,按从 9 到 0 的桶顺序将它们收集回输入数组。
对每个数字位置重复步骤 4-6,直到所有数字都处理完毕。
最后,输入数组将使用基数排序按降序排序。
示例
以下程序定义了三个函数:getMax、countSort 和 radixSort。getMax 函数在给定数组中找到最大值。countSort 函数根据给定的指数 (exp) 执行计数排序。radixSort 函数通过重复调用 countSort 函数来实现基数排序,以处理每个数字位置。在主函数中,定义了一个整数数组,然后应用基数排序以按降序排列数组。排序前后的数组都会被打印。
package main import ( "fmt" ) func getMax(arr []int) int { max := arr[0] for _, num := range arr { if num > max { max = num } } return max } func countSort(arr []int, exp int) { n := len(arr) output := make([]int, n) count := make([]int, 10) for i := 0; i < n; i++ { count[(arr[i]/exp)%10]++ } for i := 1; i < 10; i++ { count[i] += count[i-1] } for i := n - 1; i >= 0; i-- { output[count[(arr[i]/exp)%10]-1] = arr[i] count[(arr[i]/exp)%10]-- } for i := 0; i < n; i++ { arr[i] = output[i] } } func radixSort(arr []int) { max := getMax(arr) for exp := 1; max/exp > 0; exp *= 10 { countSort(arr, exp) } } func main() { arr := []int{170, 45, 75, 90, 802, 24, 2, 66} fmt.Println("Array before sorting:", arr) radixSort(arr) fmt.Println("Array after sorting:", arr) }
输出
Array before sorting: [170 45 75 90 802 24 2 66] Array after sorting: [2 24 45 66 75 90 170 802]
结论
总之,我们探讨了使用 Go 编程语言实现基数排序以按降序排列整数。基数排序是一种非比较排序算法,它对要排序的数字的个位数字进行操作。在整篇文章中,我们演示了实现基数排序的分步方法,涵盖了算法中涉及的关键概念和操作。通过根据数字的有效位数将数字分配到不同的桶中,基数排序可以有效地对整数进行排序。