基数排序是唯一的非比较排序算法吗?

Posted

技术标签:

【中文标题】基数排序是唯一的非比较排序算法吗?【英文标题】:Is radix sort the only non-comparison sorting algorithm? 【发布时间】:2011-05-12 20:22:22 【问题描述】:

正如标题所说,我的猜测是肯定的。

【问题讨论】:

你说的非比较是什么意思?各种都必须比较 something,除非你每个桶的物品不超过一件。 @Loadmaster:这个名字有点误导——它的意思是一种不会原子地比较元素的排序。 意大利面条排序(如果有合适的硬件)... 我认为睡眠排序也被认为是非比较的...... 【参考方案1】:

不 - 除其他外,还有计数排序和桶排序。查看Wikipedia article 了解更多信息。

【讨论】:

【参考方案2】:

任何集合都可以不使用比较进行排序。

过程是

决定输入域 M 的可管理大小,您可以处理以将其记录在可管理的数组中。对于字符(8 位),域为 0-255。 以某种有序的方式将输入拆分到数组中。 如果仍未完全考虑输入,即未考虑 M 中的所有位,请重复并冲洗。

例如,一个 32 位的 M 整数排序可以执行为:

查看前 8 位,将(引用、指针或您的语言可用的)放入 8 位范围内。把它们放在一个数组 [0-255] 中,现在你的值有了一个粗略的(粗略)排序。 查看接下来的 8 位,将它们放在类似的数组中,保持对第一个排序的引用。 接下来的 8x2 位以相同的方式处理。要提取您遵循第一组的链接。

基数排序使用数字并有 2 个变体,(MSB 到 LSB)和(LSB 到 MSB)。

计数排序只使用第一步

桶排序通常是指计数排序和比较排序的混合。

有趣的是,对于相当多的用例,比较排序很短。

【讨论】:

以上是关于基数排序是唯一的非比较排序算法吗?的主要内容,如果未能解决你的问题,请参考以下文章

基数排序数字比较

常用的内部排序方法-非比较排序

排序算法非比较排序:计数排序基数排序桶排序

基数排序算法的Java实现

十大经典排序算法的算法描述和代码实现

排序算法 (11.基数排序)