首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript Array.sort实现?

Javascript Array.sort实现?
EN

Stack Overflow用户
提问于 2008-10-24 18:08:14
回答 8查看 119.9K关注 0票数 274

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-10-25 15:02:51

我刚刚看了一下WebKit (Chrome,Safari…)source。根据数组的类型,使用不同的排序方法:

使用C++标准库函数std::qsort对快速排序(或原始类型数组)进行排序,该函数实现了快速排序的一些变体(通常是introsort)。

如果Contiguous arrays of non-numeric type可用(以获得稳定的排序),则使用mergesort进行字符串标识和排序;如果没有merge sort可用,则使用qsort进行排序。

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

然后是像this comment这样的宝石

代码语言:javascript
复制
// 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指出了原始答案中的错误。)

票数 338
EN

Stack Overflow用户

发布于 2008-10-24 18:43:49

如果你看一下这个bug 224128,就会发现Mozilla正在使用MergeSort。

票数 79
EN

Stack Overflow用户

发布于 2008-10-24 18:35:00

ECMAscript标准没有指定要使用哪种排序算法。实际上,不同的浏览器具有不同的排序算法。例如,在对地图进行排序时,Mozilla/Firefox的stable ()不是排序(从单词的排序意义上讲)。IE的sort()是稳定的。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/234683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档