我实现了快速排序,发现它比原生 .sort()
方法更快,here is the Performance test
为什么以及如何发生这种情况?
最佳答案
原因是尽管 .sort() 方法是原生的,但它比快速排序更通用。
排序方法采用比较函数。而在快速排序的情况下,比较的种类已经有限。
native sort() 方法速度较慢,以解决更多非常规比较函数。
另请注意:您应该阅读 underscore.js 与 lowdash 的对比。
Lowdash 充满了使用 for 循环而不是原生函数来提高速度的方法。
更新: 我阅读了下面的评论并意识到我的错误。经过一番挖掘,我找到了 native 性能较慢的真正原因。 native 代码显然是用较低级别的语言编写的,例如 C,其“安全”程度低于 javascript。
native 函数有许多检查以确保没有错误并且不会中断。 Javascript 代码不需要像 Javascript 那样多的检查,因为一种语言无论如何都会使您避免许多此类错误。
答案仍然不太令人信服,但是与 Array.forEach 相比,来自 lowdash 的 .each 也有类似的结果,低破折号的实现速度更快。这是因为低破折号实现跳过了 if (... in ....) 检查。由于当今 Javascript 的编译方式,诸如此类的小差异可以帮助 javascript 变得更快。所有功能在运行之前基本上都已转换为 native 代码。因此原生优势微乎其微。
关于javascript - 为什么 native 浏览器排序功能比快速排序慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649515/