JS数组函数 sort 实现机制

拓展阅读:通过V8源码看一个关于JS数组排序的诡异问题

对js数组进行排序,是一段常识性的代码了。但是一直疑惑的是,sort函数为什么可以将一个减法结果,改变对数组元素的排序?

var arr = [1,3,12,3,5,89]
//小数在前,大数在后
arr.sort( function(a, b){
    
    
  return a-b;
});
//[1, 3, 3, 5, 12, 89]

今天找了一下,发现最根本的原因是sort函数的内部实现机制:sort()方法会接受一个比较函数compare(a, b),该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字,凡是返回1或者大于0的正数的时候就要交换位置。

至于具体的实现方式,不同的引擎给出的实现不同:

V8 引擎 sort 函数只给出了两种排序 InsertionSort 和 QuickSort,数量小于10的数组使用 InsertionSort,比10大的数组则使用 QuickSort。v8- array.js源码

Mozilla/Firefox : 归并排序(jsarray.c 源码

Webkit :底层实现用了 C++ 库中的 qsort() 方法(JSArray.cpp 源码

参考链接2 :https://www.cnblogs.com/huoxiao/p/10239284.html

参考链接1:https://segmentfault.com/q/1010000007133473?_ea=1247880

猜你喜欢

转载自blog.csdn.net/lamanchas/article/details/106339192