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 编程语言实现基数排序以按降序排列整数。基数排序是一种非比较排序算法,它对要排序的数字的个位数字进行操作。在整篇文章中,我们演示了实现基数排序的分步方法,涵盖了算法中涉及的关键概念和操作。通过根据数字的有效位数将数字分配到不同的桶中,基数排序可以有效地对整数进行排序。

更新于: 2023年7月20日

92 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告