Javascript Array.sort 实现?
2022-08-30 00:11:30
JavaScript 函数使用哪种算法?我知道它可以采取各种参数和函数来执行不同类型的排序,我只是对香草排序使用哪种算法感兴趣。Array#sort()
JavaScript 函数使用哪种算法?我知道它可以采取各种参数和函数来执行不同类型的排序,我只是对香草排序使用哪种算法感兴趣。Array#sort()
我刚刚看了一下WebKit(Chrome,Safari ...源。根据数组的类型,使用不同的排序方法:
数字数组(或基元类型的数组)使用C++标准库函数std::qsort进行排序,
该函数实现了快速排序(通常是introsort)的某些变体。
非数值类型的连续数组使用 mergesort 进行字符串化和排序(如果可用(以获得稳定的排序)或如果没有可用的合并排序。qsort
对于其他类型(非连续数组,大概对于关联数组),WebKit 使用选择排序(他们称之为“min”排序),或者在某些情况下,它通过 AVL 树进行排序。不幸的是,这里的文档相当模糊,因此您必须跟踪代码路径才能实际查看使用哪种排序方法的类型。
然后有像这样的宝石评论:
// 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).
- 让我们只希望任何真正“修复”它的人比这个评论的作者对渐近运行时有更好的理解,并意识到基数排序的运行时描述比简单的O(N)稍微复杂一些。
(感谢phsource指出原始答案中的错误。