JavaScript Array#sort()函数使用哪种算法?我知道执行不同种类的排序可能需要各种参数和函数,我只是对普通排序使用哪种算法感兴趣.

推荐答案

我刚刚看过WebKit(Chrome、Safari…)source.根据数组的类型,使用不同的排序方法:

使用C++标准库函数std::qsortNumeric arrays(或基元类型数组)进行排序,该C++标准库函数std::qsort实现快速排序的一些变体(通常是introsort).

如果可用(以获得稳定的排序),则使用mergesort对Contiguous arrays of non-numeric type进行字符串化和排序;如果没有可用的合并排序,则使用qsort进行字符串化和排序.

对于其他类型(非连续数组和可能用于关联数组),WebKit使用selection sort(他们称之为“min” sort),或者在某些情况下,它通过AVL树进行排序.不幸的是,这里的文档相当模糊,所以您必须跟踪代码路径才能真正了解哪些类型使用了哪种排序方法.

还有像this comment这样的Ruby :

// FIXME: Since we sort by string value, a fast algorithm might be to use a
// radix sort. That would be O(N) rather than O(N log N).

–我们只希望真正"修复"这一问题的人比本文作者对渐近运行时间有更好的理解,并意识到radix sort has a slightly more complex runtime description比O(N)更简单.

(感谢phsource指出原始答案中的错误.)

Javascript相关问答推荐

CSS背景过滤器忽略转换持续时间(ReactJS)

如何在Jest中调用setupFile下列出的文件所需的函数?

如何解决(不忽略)reaction详尽的linter规则,而不会在获取数据时导致无限的reender循环

在JavaScript中打开和关闭弹出窗口

从外部访问组件变量-Vueejs

Express.js:使用Passport.js实现基于角色的身份验证时出现太多重定向问题

获取表格的左滚动位置

成帧器运动中的运动组件为何以收件箱开始?

将json数组项转换为js中的扁平

IMDB使用 puppeteer 加载更多按钮(nodejs)

类型脚本中只有字符串或数字键而不是符号键的对象

React Code不在装载上渲染数据,但在渲染上工作

在带有背景图像和圆形的div中添加长方体阴影时的重影线

S文本内容和值不必要的不同

当输入字段无效时,我的应用程序不会返回错误

400 bad request error posting through node-fetch

在VS代码上一次设置多个变量格式

按什么顺序接收`storage`事件?

使用线性插值法旋转直线以查看鼠标会导致 skip

使用createBrowserRoutVS BrowserRouter的Reaction路由