chrome浏览器中,javascript数组sort函数采用的什么排序算法?
chrome浏览器下,javascript的sort函数用的什么排序算法?
let arr=[1,99,4,20,8,13,5,67,32,50];
arr.sort((a,b)=>{
console.log(a, b);
return a-b;
});
输出的结果为:
看着输出结果,愣是没有推理出sort的排序算法,心塞呀。js大神帮我看看哈。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
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 源码)
深入源码https://github.com/v8/v8/blob...
这个是插入排序
可以参考zollero的解释
大神的解释
可以理解为使用冒泡排序的原理。
示例简化如下:
var array = [10,5,40,25,1000,1];
array.sort(compareFunction);
function compareFunction(a, b) {
}
console.log(array);
参数a和b,就是依次从array数组中取连续的两个元素,如从示例中先选择前两个元素:10, 5。
所以,在匿名函数内 a - b 的结果是 5。
再看下,匿名函数的结果跟排序的关系:
如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注:ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
所以,示例是按照 compareFunction(a, b) 的返回值来排序的。
汗颜,没往算法方向深入研究过。。。 chrome内核是webkit
看下这个帖子吧: https://segmentfault.com/q/10...