哪种排序算法能够更快地提供近似/近似排序?

时间:2009-05-27 05:38:15

标签: algorithm language-agnostic sorting

哪种排序算法产生的中间排序是良好的近似值?

通过“良好的近似”,我的意思是根据Kendall的tau和Spearman的脚趾等指标来确定有序列表与另一个列表的“远”(在这种情况下,确切的排序)

我想到的特定应用是人类进行主观成对比较的地方,可能无法完成所有 n log n 比较,例如,heapsort或最佳情况快速排序。< / p>

哪些算法比其他算法更快将列表提升到接近/近似排序?

6 个答案:

答案 0 :(得分:8)

您可能想要查看shell排序算法。

AFAIK它是唯一可用于主观比较的算法(意味着你不会有任何关于中值的提示),它会在每次传递时更接近正确的排序。

以下是一些更多信息http://en.wikipedia.org/wiki/Shell_sort

答案 1 :(得分:3)

我会建议一些版本的quicksort。如果您知道要排序的数据在哪个范围内,那么您可以巧妙地选择枢轴元素,并且可能一次将问题分成两个以上的部分。

答案 2 :(得分:2)

从左到右的基数排序和停止过早(没有双关语)怎么样?

这将是Nb运行时,其中b是您决定检查的位数。你检查的位越多,它的排序就越多

未排序:
5 0101
8 1000
4 0100
13 1101
1 0001

1位(N)后:
5 0101
1 0001
4 0100
13 1101
8 1000

2位(2N)后 1 0001
5 0101
4 0100
8 1000
13 1101

依旧......

答案 3 :(得分:1)

我对sorts on this page的完全非科学和视觉调查表明“梳子排序”看起来不错。每次通过似乎都会得到更好的近似。

答案 4 :(得分:0)

我设计了一种名为“锦标赛排序”的NlgN排序算法,它按顺序查找输出项目(即,它首先找到第一项,然后找到第二项,等等)。我不确定它是否完全实用,因为簿记开销超过了快速排序,合并排序等,但在使用1,000,000个随机项目进行基准测试时,比较计数实际上出现在标准库快速排序实现之下(尽管我不是确定它如何对抗新的)。

出于我的算法的目的,每个项目的“得分”是已知比它更好的项目数。最初,每个项目的得分为0.当比较两个项目时,更好的项目会将其他项目的得分加上其得分加一。要运行算法,请将所有项目声明为“符合条件”,并且只要保留多个符合条件的项目,请将两个符合条件的项目与最低分数进行比较,并使失败者“不合格”。除了一个项目之外的所有项目都被宣布为不合格时,输出剩余的一个项目,然后声明符合条件的项目被“殴打”的所有项目。

比较两个得分最低的项目所需的优先级队列会带来一些令人讨厌的簿记开销,但如果要对比较昂贵的事情进行排序,那么该算法可能会很有趣。

答案 5 :(得分:-2)

我认为是泡泡排序。优点是您可以通过额外扫描数据逐步改进排序。