zoukankan      html  css  js  c++  java
  • 基数排序/Go实现

     1 package main
     2 import (
     3     "fmt"
     4 )
     5 
     6 type Radix struct {
     7     length int    //序列中最大数的位数
     8     radix [][]int    //0-9的10个桶
     9     nums []int    //要排序的序列
    10 }
    11 //初始化排序的相关参数
    12 func (r *Radix ) Init(numbers []int) {
    13     r.nums = numbers
    14     r.getLen() 
    15 }
    16 //获取序列最大数的位数
    17 func (r *Radix) getLen() {
    18     size := len(r.nums)
    19     max := r.nums[0]
    20     for i := 1; i < size; i++ {
    21         if r.nums[i] > max {
    22             max = r.nums[i]
    23         }
    24     }
    25     r.length = 1
    26     max = max / 10
    27     for max > 0 {
    28         r.length++
    29         max = max / 10
    30     }
    31 }
    32 //输出序列
    33 func (r *Radix) Display() {
    34     for _, v := range r.nums {
    35         fmt.Printf("%d\t", v)
    36     }
    37     fmt.Print("\n")
    38 }
    39 //排序函数
    40 func (r *Radix) Sort() {
    41     size := len(r.nums)
    42     var i, j, k int
    43     m := 1
    44     for i = 1; i <= r.length; i++ {        //循环次数为常数,即序列中最大数的位数
    45         r.radix = make([][]int, 10)    
    46         for j = 0; j < 10; j++ {    //初始化0-9各位桶
    47             r.radix[j] = make([]int, 0)
    48         }
    49         for j = 0; j < size; j++ {    //遍历要排序的序列,将相应位数的元素加入到对应的位桶中
    50             k = r.nums[j] / m % 10
    51             r.radix[k] = append(r.radix[k], r.nums[j])
    52         }
    53         r.nums = make([]int, 0)        //清空原序列数组
    54         for j = 9; j >= 0; j-- {    //将9-0各位桶的数重新组装放到原序列数组当中
    55             r.nums = append(r.nums, r.radix[j]...)
    56         }
    57         m = m * 10
    58         r.Display()
    59     }
    60 
    61     
    62 }
    63         
    64 
    65 func main() {
    66     r := new(Radix)
    67     r.Init([]int{430, 122, 332, 167, 899, 998, 455, 691, 571})
    68     r.Sort()
    69 }
  • 相关阅读:
    微信小程序学习随笔
    SqlServer索引假脱机的解决
    web服务器出现大量CLOSE_WAIT连接的前因后果
    SqlServer和mysql字段拼接方法
    使用beego创建员工加班调休系统
    在c#程序中初步使用redis
    使用golang实现批量发送面试邀请邮件
    记c# rabbitmq的使用
    项目中使用mongodb的尝试
    手机集成支付宝支付功能的注意事项
  • 原文地址:https://www.cnblogs.com/Sunlnx/p/3404869.html
Copyright © 2011-2022 走看看