我实施了快速排序,发现它比原始.sort()
方法工作得更快,here is the Performance test
为什么以及如何发生这种情况?
答案 0 :(得分:2)
原因是即使.sort()方法是原生的,它也比快速排序更通用。
sort方法采用比较功能。虽然在快速排序的情况下,这种比较已经受到限制。
本机sort()方法较慢,无法考虑更多非常规比较函数。
另外值得注意的是:您应该阅读有关underscore.js与lowdash的内容。
Lowdash充满了使用for循环而不是本机函数来提高速度的方法。
更新: 我阅读下面的评论并意识到我的错误。经过一番挖掘后,我发现原生性能较慢的真正原因。本机代码显然使用较低级别的语言,例如C,它比javascript更“安全”。
本机函数有许多检查以确保没有错误且事情不会中断。 Javascript代码不需要像Javascript一样多的检查,因为语言可以避免许多此类错误。
答案仍然不太令人信服,但是。与Array.forEach相比,lowdash中的每一个也有类似的结果,低破折号实现更快。这是因为低破折号实现会跳过if(... in ....)检查。像这样的小差异可以帮助javascript变得更快,因为这些天Javascript的编译方式。所有功能在运行之前基本上都转为本机代码。所以原生优势很小。
答案 1 :(得分:0)
你确定原生函数实现快速排序而不是稳定排序吗?
好的读物:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort