Array.prototype.sort()

Javascript 中的 sort(<compareFunction>) 函数,如果不存在 <compareFunction>,默认会先将数组内元素转换成字符串,然后对字符串按照 Unicode 编码大小进行排序。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

<compareFunction> 作为策略函数,指定了

  1. compareFunction(a, b) < 0 则a排在b前面 => 位置不变
  2. compareFunction(a, b) == 0 则顺序不变 => 位置不变
  3. compareFunction(a, b) > 0 则b排在a前面 => 位置交换

https://github.com/v8/v8/blob/master/src/js/array.js#L726
策略源码, 若数组长度在10 以内,则使用插入排序
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

1
2
3
4
5
6
7
8
9
10
11
12

https://segmentfault.com/q/1010000010717916?sort=created
chrome浏览器中,javascript数组sort函数采用的什么排序算法?
[1, 2, 3].sort((a, b) => 1) // [3, 2, 1]
[1, 2, 3].sort((a, b) => 0) // [1, 2, 3]
[1, 2, 3].sort((a, b) => -1) // [1, 2, 3]

[1, 2, 3].sort((a, b) => true) // [3, 2, 1]
[1, 2, 3].sort((a, b) => false) // [1, 2, 3]

[1, 2, 3].sort((a, b) => a > b) // [1, 2, 3]
[1, 2, 3].sort((a, b) => a < b) // [3, 2, 1]