我正在进行排序算法。基数排序表示为非比较排序,但它比较数字中的数字并对它们进行排序。可以有人请让我知道非比较排序实际意味着什么?
答案 0 :(得分:5)
据我了解,比较和非比较排序算法之间的区别不在于算法中是否存在比较,,而是它们是否使用要排序的项目的内部字符。
比较排序算法通过比较彼此之间的值来对项目进行排序。它可以应用于任何排序情况。最好的复杂性是O(n*log(n))
,可以通过数学证明。
非比较排序算法使用要排序的值的内部字符。它只能应用于某些特定情况,并且需要特定值。最好的复杂性可能更好,具体取决于案例,例如O(n)
。
可以使用非比较排序算法排序的所有排序问题都可以使用比较排序算法进行排序,但反之亦然。
对于Radix排序,它受益于已排序的项目是可以减少为数字的数字。它关心的是排序的项目。而比较排序算法只需要一个项目的顺序。
答案 1 :(得分:4)
比较排序算法比较正在排序的项目对,每个比较的输出是二进制的(即smaller than
或not smaller than
)。基数排序按顺序考虑数字的数字而不是比较数字,将数据组中的数字与数字的值相对应(以稳定的方式)。请注意,数字不会与任何内容进行比较 - 它只是放在与其值对应的存储桶中。
重要的是要知道为什么我们关心比较/非比较排序算法。如果我们使用比较排序算法然后在每次比较中我们将可能结果的集合大致分成两半(因为输出是二进制),因此我们可能具有的最佳复杂度是O(log(n!)) = O(n*log(n))
。此限制不适用于非比较排序。