在JavaScript中(某些情况下也适用于其他语言),如果您不知道代码运行的目标实现,是否有一种方法可以检测底层排序算法(
我在webkit中找到了2个测试(1) (2),但这些测试有多可靠?(这个检查是否可以使用PCP完成?)我正在寻找一个数学上正确的解决方案。
这是一个棘手的问题,因为更先进的排序算法可以根据源数组的长度(例如Timsort)改变子算法。我一直感到困惑,因为我运行的每个测试都显示Google Chrome的排序是稳定的,但我看到的所有文档都说它是不稳定的(the source会告诉你原因)。
(通常,我使用this strategy来使我的排序稳定;它对性能有一点影响,但有时可能会很明显)
在各种实现中进行排序的源代码:
Array.sort
的算法)是否稳定,仅知道它遵循规范?我在webkit中找到了2个测试(1) (2),但这些测试有多可靠?(这个检查是否可以使用PCP完成?)我正在寻找一个数学上正确的解决方案。
这是一个棘手的问题,因为更先进的排序算法可以根据源数组的长度(例如Timsort)改变子算法。我一直感到困惑,因为我运行的每个测试都显示Google Chrome的排序是稳定的,但我看到的所有文档都说它是不稳定的(the source会告诉你原因)。
(通常,我使用this strategy来使我的排序稳定;它对性能有一点影响,但有时可能会很明显)
在各种实现中进行排序的源代码:
I
的排序算法S
。通常情况下,S
将实际的排序工作分配给某个稳定的排序算法T
,但是当I
等于某个特殊值I'
时,它会使用一个不稳定的排序算法U
。除非你碰巧将I'
作为输入传递进去,否则你永远无法证明S
是不稳定的。更现实的情况是,也许S
只有在I
非常长的情况下才使用不稳定的排序算法。同样地,只有在测试足够长的输入时,你才能观察到不稳定的排序。 - apsillers[计算机科学]
和/或[计算机科学理论]
的标签,你可能会得到更多关注。 - apsillers