我不相信这是这个How does Javascript's sort() work?的复制品
let arr = [3, 4, 2, 1];
arr.sort((second,first) => {
console.log([first, second]);
if (first>second) {
return -1; // switch them
}
return 0; // don't switch them
});
console.log(arr);
字符串
这将返回
[ 3, 4 ]
[ 4, 2 ]
[ 4, 2 ] <---- Why is this output twice?
[ 3, 2 ]
[ 3, 1 ]
[ 2, 1 ]
[ 1, 2, 3, 4 ]
型
我试图弄清楚NodeJS(14.4.0)对我的输入使用什么算法进行Array.sort?
2条答案
按热度按时间7lrncoxx1#
在这个post中需要注意的是,v8引擎显然使用Timsort进行排序:
https://v8.dev/blog/array-sort#timsort
cunj1qz12#
正如@Joe所指出的,V8引擎已经用TimSort实现了
Array.prototype.sort()
,TimSort本身使用BinaryInsertionSort。我对V8 Torque语言了解不多,所以我实验的以下行为,我无法在链接的.tq文件中验证它。字符串
是这样的:
型
如果你使用一个更大的数组,比如
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -1]
,你会更好地看到二分法逻辑:型