对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