扫码关注官方订阅号
据说sort函数内部用了二十多种排序方法,是根据要排序数的乱序程度来决定使用哪一种排序方法的,具体是怎样实现的呢?有木有源代码?
闭关修行中......
20多种。。。稍微有点常识不会这么说的,排序一共都没有20多种。
array源码
710行开始。
感谢@ne_smalltown 给出 V8 引擎的 array.js 代码。
array.js
原来,V8 引擎 sort 函数只给出了两种排序 InsertionSort 和 QuickSort,数量小于10的数组使用 InsertionSort,比10大的数组则使用 QuickSort。
sort
InsertionSort
QuickSort
每个引擎的实现,都不一样阿 ...
Mozilla/Firefox : 归并排序(jsarray.c 源码)V8 :数组长度小于等于 22 的用插入排序,其它的用快速排序(array.js 源码)见下面注释
// In-place QuickSort algorithm. // For short (length <= 22) arrays, insertion sort is used for efficiency.
Webkit :底层实现用了 C++ 库中的 qsort() 方法(JSArray.cpp 源码)
Reference:http://stackoverflow.com/ques...http://stackoverflow.com/ques...http://stackoverflow.com/ques...
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
20多种。。。稍微有点常识不会这么说的,排序一共都没有20多种。
array源码
710行开始。
感谢@ne_smalltown 给出 V8 引擎的
array.js代码。原来,V8 引擎
sort函数只给出了两种排序InsertionSort和QuickSort,数量小于10的数组使用InsertionSort,比10大的数组则使用QuickSort。每个引擎的实现,都不一样阿 ...
Mozilla/Firefox : 归并排序(jsarray.c 源码)
V8 :数组长度小于等于 22 的用插入排序,其它的用快速排序(array.js 源码)见下面注释
Webkit :底层实现用了 C++ 库中的 qsort() 方法(JSArray.cpp 源码)
Reference:
http://stackoverflow.com/ques...
http://stackoverflow.com/ques...
http://stackoverflow.com/ques...