`sort_by` 的复杂度是多少?
What is the complexity of `sort_by`?
想知道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]]
sort
方法需要 O(n log n)。 sort_by
方法实现了 Schwartzian 变换。它增加了 O(2 n) 的开销,而实际排序保持在 O(n log n)。这可能会有所回报,因为迭代变得比原始迭代更快。
sort
对于小数组应该更快,而 sort_by
对于大数组表现更好。理论上。
我忍不住要进行基准测试,这就是结果。 x 轴上的数组大小,y 轴上的排序时间(以秒为单位)。数组元素是使用 SecureRandom.base64(50)
创建的随机字符串。 Ruby 版本为 1.8.7。
结果表明,随着数组大小的增加,sort_by
并没有显着超过 sort
。
想知道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]]
sort
方法需要 O(n log n)。 sort_by
方法实现了 Schwartzian 变换。它增加了 O(2 n) 的开销,而实际排序保持在 O(n log n)。这可能会有所回报,因为迭代变得比原始迭代更快。
sort
对于小数组应该更快,而 sort_by
对于大数组表现更好。理论上。
我忍不住要进行基准测试,这就是结果。 x 轴上的数组大小,y 轴上的排序时间(以秒为单位)。数组元素是使用 SecureRandom.base64(50)
创建的随机字符串。 Ruby 版本为 1.8.7。
结果表明,随着数组大小的增加,sort_by
并没有显着超过 sort
。