基数排序horange
| 2023-7-21
0  |  阅读时长 0 分钟
 
 
基数排序是一种非比较型的排序算法,最早用于解决卡片排序的问题。
 
工作原理:将待排序的元素拆分为 个关键字(比较两个元素时,先比较第一关键字,如果相同再比较第二关键字……),然后先对第 关键字进行稳定排序,再对第 关键字进行稳定排序,再对第 关键字进行稳定排序……最后对第一关键字进行稳定排序,这样就完成了对整个待排序列的稳定排序。
 
基数排序的过程如下:
  1. 找出位数最长的数字,确定要处理的位数,即基数排序的趟数
  1. 依次由个位开始处理,把相应位数上的数字,放入相应序号的桶里面,完成后,再按照桶的序号,依次取出桶里面的数据,放回原始的数组当中
  1. 当处理完所有的位数,最终得到有序的序列。
 
notion image
通常而言,基数排序比基于比较的排序算法(比如快速排序)要快。但由于需要额外的内存空间,因此当内存空间稀缺时,原地置换算法(比如快速排序)或许是个更好的选择。
 
时间复杂度
一般来说,如果每个关键字的值域都不大,就可以使用计数排序作为内层排序,此时的复杂度为 ,其中为第 关键字的值域大小。如果关键字值域很大,就可以直接使用基于比 较的 排序而无需使用基数排序了。
 
空间复杂度
空间复杂度为
 
代码实现
 
 
 

最大间距

题目:给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。
示例:
一种最简单的思路是将数组排序后再找出最大间距,但传统的基于比较的排序算法(快速排序、归并排序等)均需要 的时间复杂度。如果要将时间复杂度降到 ,就必须使用其他的排序算法。例如,基数排序可以在的时间内完成整数之间的排序。
目录