据我理解,比较排序算法和非比较排序算法的区别不在于算法中是否存在比较,而在于它们是否使用要排序项目的内部特性。比较排序算法通过比较项目之间的值来对项目进行排序。它可以应用于任何排序情况。最好的复杂度是O(n*log(n)),这可以通过数学证明。非比较排序算法使用要排序值的内部特性。它只能应用于某些特定情况,并需要特定的值。最佳复杂度可能取决于情况,例如O(n)。使用非比较排序算法可以解决的所有排序问题都可以使用比较排序算法来解决,但反之则不成立。对于基数排序,它受益于排序项是可缩减为数字的数字。它关心的是被排序的项是什么。而比较排序算法只需要一个项目的顺序。
比较排序算法会比较排序中被排序的项对,每次比较的输出是二进制的(即小于或不小于)。基数排序按顺序考虑数字的各个位,并将数字根据位的值(稳定地)分组到桶中,而不是进行比较。请注意,数字不会与任何东西进行比较-它只是放在与其值相对应的桶中。知道为什么我们关心比较/非比较排序算法很重要。如果我们使用比较排序算法,则在每次比较时,我们将大致将可能的结果集一分为二(因为输出是二进制的),因此我们可能拥有的最佳复杂度是O(log(n!)) = O(n*log(n))。这种限制对于非比较排序并不适用。