当前位置: 首页 > news >正文

数组排序简介-基数排序(Radix Sort)

基本思想

        将整数按位数切割成不同的数字,然后从低位开始,依次到高位,逐位进行排序,从而达到排序的目的。

算法步骤

        基数排序算法可以采用「最低位优先法(Least Significant Digit First)」或者「最高位优先法(Most Significant Digit first)」。最常用的是「最低位优先法」。

   下面我们以最低位优先法为例,讲解一下算法步骤。

  1. 确定排序的最大位数:遍历数组元素,获取数组最大值元素,并取得对应位数。
  2. 从最低位(个位)开始,到最高位为止,逐位对每一位进行排序
    1. 定义一个长度为 10的桶数组 buckets,每个桶分别代表 0∼9 中的 1 个数字。
    2. 按照每个元素当前位上的数字,将元素放入对应数字的桶中。
    3. 清空原始数组,然后按照桶的顺序依次取出对应元素,重新加入到原始数组中。

以 [692,924,969,503,871,704,542,436]为例,演示一下基数排序算法的整个步骤。

适用场景

        大规模整数排序,固定长度数据排序,稳定性要求高的排序场景,数据分布较为均匀的情况,外部排序场景

排序稳定性

        基数排序采用的桶排序是稳定的。基数排序是一种 稳定排序算法

代码实现(golang)

func getMax(arr []int) int {max := arr[0]for _, v := range arr {if v > max {max = v}}return max
}func radixSort(arr []int) []int {max := getMax(arr)exp := 1for max/exp > 0 {buckets := make([][]int, 10)for _, v := range arr {digit := (v / exp) % 10buckets[digit] = append(buckets[digit], v)}arr = []int{}for _, bucket := range buckets {arr = append(arr, bucket...)}exp *= 10}return arr
}func main() {arr := []int{170, 45, 75, 90, 802, 24, 2, 66}sortedArr := radixSort(arr)fmt.Println(sortedArr)
}

http://www.lryc.cn/news/475873.html

相关文章:

  • 进程间通信(命名管道 共享内存)
  • Python 网络爬虫教程:从入门到高级的全面指南
  • 深度学习:正则化(Regularization)详细解释
  • Freertos学习日志(1)-基础知识
  • CentOS9 Stream 支持输入中文
  • 基于向量检索的RAG大模型
  • 【力扣 + 牛客 | SQL题 | 每日5题】牛客SQL热题216,217,223
  • Unity humanoid 模型头发动画失效问题
  • 最全Kafka知识宝典之Kafka的基本使用
  • 机器学习中的数据可视化:常用库、单变量图与多变量图绘制方法
  • CodeQL学习笔记(3)-QL语法(模块、变量、表达式、公式和注解)
  • 代码随想录训练营Day11 | 226.翻转二叉树 - 101. 对称二叉树 - 104.二叉树的最大深度 - 111.二叉树的最小深度
  • “死鱼眼”,不存在的,一个提词小技巧,拯救的眼神——将内容说给用户,而非读给用户!
  • 深度学习在复杂系统中的应用
  • vue3图片懒加载
  • 总结一些高级的SQL技巧
  • 无人机飞手考证热,装调检修技术详解
  • AI资讯快报(2024.10.27-11.01)
  • 范式的简单理解
  • 活着就好20241103
  • 《华为工作法》读书摘记
  • 【Unity基础】初识UI Toolkit - 运行时UI
  • 20.体育馆使用预约系统(基于springboot和vue的Java项目)
  • unity3d————三角函数练习题
  • 如何在Linux系统中使用Git进行版本控制
  • Ubuntu编译linux内核指南(适用阿里云、腾讯云等远程服务器;包括添加Android支持)
  • [MySQL]DQL语句(一)
  • GPT原理;ChatGPT 等类似的问答系统工作流程如下;当用户向 ChatGPT 输入一个问题后:举例说明;ChatGPT不是通过索引搜索的传统知识库
  • 目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8
  • 计算布尔二叉树的值