基数排序简单了解

基数排序是根据数字每一位从低到高去进行分类排序的

比如对于数组[1, 11, 2, 12],从个位数开始,1和11分到了桶1,2和12分到了桶二,接着十位数,1和2分到了一桶,但由于在上一次分桶中,2在1之后,所以这个顺序仍然会保留,11和12也是一样,因此最后得到正确的有序数组[1, 2, 11, 12]

func digit(num, exp int) int {
   
	return (num / exp) % 10
}

func countingSortDigit(nums []int, exp int) {
   
	counter := make([]int, 10)
	n := len(nums)

	// 统计0~9数字出现次数
	for i := 0; i < n; i++ {
   
		d := digit(nums[i], exp)
		counter[d]++
	}

	// 计算出现次数的前缀和,以方便计算后面元素所放置位置
	for i := 1; i < 10; i++ {
   
		counter[i] += counter[i-1]
	}

	// 根据数字找到所在的桶
	res := make([]int, n)
	for i := n - 1; i >= 0; i-- {
   
		d := digit(nums[i], exp)
		j := counter[d] - 1
		res[j] = nums[i]
    // 减去前缀和,保证该位同数字不落入同一个位置
		counter[d]--
	}
	for i := 0; i < n; i++ {
   
		nums[i] = res[i]
	}
}

func radixSort(nums []int) {
   
	// 找到数组中最大的数
	x := math.MinInt
	for _, num := range nums {
   
		if num > x {
   
			x = num
		}
	}

  // 从低到高位进行排序
	for exp := 1; exp <= x; exp *= 10 {
   
		countingSortDigit(nums, exp)
	}
}

Ref

  1. https://www.hello-algo.com/chapter_sorting/radix_sort

相关推荐

  1. 基数排序简单

    2023-12-06 16:04:05       59 阅读
  2. Go简单

    2023-12-06 16:04:05       49 阅读
  3. 分库分表-简单

    2023-12-06 16:04:05       29 阅读
  4. 【Docker学习】docker checkpoint简单

    2023-12-06 16:04:05       36 阅读
  5. MySQL随便聊----之SQL的简单

    2023-12-06 16:04:05       129 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 16:04:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 16:04:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 16:04:05       82 阅读
  4. Python语言-面向对象

    2023-12-06 16:04:05       91 阅读

热门阅读

  1. 基于Hadoop的异构网络协同过滤推荐算法设计

    2023-12-06 16:04:05       49 阅读
  2. 可以使用京东商品详情 API 获取哪些商品信息?

    2023-12-06 16:04:05       61 阅读
  3. Gson与FastJson详解

    2023-12-06 16:04:05       47 阅读
  4. (C++20) constinit常量初始化

    2023-12-06 16:04:05       59 阅读
  5. P5706 【深基2.例8】再分肥宅水

    2023-12-06 16:04:05       63 阅读
  6. AIOps、微服务和云平台

    2023-12-06 16:04:05       56 阅读
  7. 做题笔记:SQL Sever 方式做牛客SQL的题目--VQ29

    2023-12-06 16:04:05       55 阅读
  8. 蓝桥杯官网练习题(平均)

    2023-12-06 16:04:05       59 阅读
  9. vscode配置代码片段

    2023-12-06 16:04:05       54 阅读
  10. rocketmq 集群环境部署及与spring cloud 集成

    2023-12-06 16:04:05       54 阅读
  11. RepidJson将内容写入文件简单代码示例

    2023-12-06 16:04:05       55 阅读
  12. 深度学习中的Transformer机制

    2023-12-06 16:04:05       58 阅读
  13. 封装请求头内容格式

    2023-12-06 16:04:05       52 阅读
  14. Flink-时间窗口

    2023-12-06 16:04:05       70 阅读