`sort_by`的复杂性是什么?

时间:2016-03-02 08:44:11

标签: ruby sorting complexity-theory

我想知道sort_by背后的排序算法是什么,以及它的复杂性。

我正在对嵌套数组进行排序,这就是它的作用;从:

arr = [[0,2],[1,1],[3,5],[4,2]]

我把它排序,

arr = arr.sort_by{|x,y|y}

它变成了:

arr = [[1,1],[0,2],[4,2],[3,5]]

1 个答案:

答案 0 :(得分:2)

sort方法需要 O n log n )。 sort_by方法实现 Schwartzian变换。它增加了 O (2 n )的开销,而实际排序仍然在 O n log < EM>名词的)。这可能会付出代价,因为迭代变得比原始迭代更快。

对于小型数组,

sort应该更快,而对于大型数组,sort_by表现更好。从理论上讲。

我无法抗拒基准,这是结果。 x 轴上的数组大小,以及 y 轴上的排序时间(以秒为单位)。数组元素是使用SecureRandom.base64(50)创建的随机字符串。 Ruby版本是1.8.7。

enter image description here

结果显示sort_by随着数组大小的增加没有明显超过sort