JavaScript中list.Reverse()的效率?

问题描述 投票:-1回答:2

有谁知道JS中反转对象列表的效率.reverse()效率如何?

我很好奇是否有任何有意义的性能损失,用于按升序排序列表(比如100个对象)并将其反转而不是仅按降序排序列表。

编辑:所以我运行了一些测试,将数组降序排序,然后反向升序。结果非常有趣:(以铬计算)

  • 随机顺序1000项,降序正常排序,10000次试验:0.3681 ms
  • 随机顺序1000项,升序排序然后反转,10000次试验:0.3651 ms
  • 1000个项目按升序排列,正常降序排序,10000个试验:0.0282毫秒
  • 1000个项目按升序排列,升序排序然后反转,10000个试验:0.0247毫秒

似乎.reverse()不是一个非常昂贵的操作,特别是与sort相比。

javascript performance optimization processing-efficiency
2个回答
1
投票

.reverse()在O(n)中工作,这从链接的规范中可以看出。它将进行元素的成对交换。

回答你的问题:sort + reverse不可避免地比sort更昂贵,没有捷径(可能是双链表或其他数据结构)。


0
投票

关于Array#sort的Ecma规范是模糊的,所以答案取决于实际的实现,假设我们正在谈论V8(Chrome,NodeJS),那么我们可以说对于具有>10元素的列表,时间复杂度是O(n log(n))Array#reverse的时间复杂度是O(n)

鉴于此,我们可以自信地说,直接按降序排序会更好,因为sort + reverse显然比sort更贵。

以后代顺序排序等于按升序排序。


更新:正如Jonas在下面的评论中所述,如果您可以注意到列表中的模式(例如列表已经过asc-sorted),那么您可能只需将其反转并保存O(n log(n))操作即可。尝试理解数据的形状始终是性能优化的第一步。

© www.soinside.com 2019 - 2024. All rights reserved.