基于比较的排序技术的局限性

时间:2009-04-26 22:46:56

标签: sorting

在大多数需要订购数据的场景中,选择了比较排序。合并排序,快速排序,插入排序和其他比较排序等技术可以处理不同的数据类型和效率,下限为O(nLog(n))。

我的问题是

  1. 基于比较的排序技术是否有任何限制?
  2. 会使用非比较排序技术的任何场景吗?
  3. 欢呼声

3 个答案:

答案 0 :(得分:3)

你自己或多或少地回答了这个问题。基于比较的分类技术限于O(n Log(n))的下限。基于非比较的分选技术不受此限制。非排序算法的一般问题是必须更好地了解域,因此它们不像基于比较的技术那样通用。

Pigeonhole sort是一个非常简单的例子,只要可能的键值的数量接近元素的数量,它就会非常快。

答案 1 :(得分:3)

显然,比较排序的局限性是时间因素 - some are better than others,但是如果数据集足够大,它们在某些时候都会变得太慢。诀窍是根据您正在排序的数据的种类和组合选择正确的。

非比较排序基于忽略数据的其他因素,例如counting sort将通过检查每个元素来排序数据集合 - 而不是将其与集合中的任何其他值进行比较。计数排序对于根据某些数据对集合进行排序很有用,如果你有一个整数集合,它会通过获取值为1的所有元素并将它们首先放入目标,然后将所有元素值2等排序。 (好吧,它使用“稀疏”数组来快速缩放集合并重新排序值,留下空白但这是基本原则)

答案 2 :(得分:0)

很容易看出,为什么比较排序需要N log N比较。有N!排列并且我们知道ln(N!)大约是N ln N - N + O(ln N)。在大O表示法中,我们可以忽略低于N ln N的项,并且由于ln和log仅相差常数,我们得到最终结果O(N log N)