基数排序是唯一的非比较排序算法吗?
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)。
计数排序只使用第一步
桶排序通常是指计数排序和比较排序的混合。
有趣的是,对于相当多的用例,比较排序很短。
【讨论】:
以上是关于基数排序是唯一的非比较排序算法吗?的主要内容,如果未能解决你的问题,请参考以下文章