JS 的sort()函数排序

4,792 阅读1分钟

使用 sort() 对数组 [3, 15, 8, 29, 102, 22] 进行排序,输出结果

答案:

sort()函数是js内置的一个数组排序函数。默认可以接收一个函数,返回值是比较两个数的相对顺序的值。sort()方法用原地算法对数组的元素进行排序, 并返回数组

1、如果没有默认函数:是按照 UTF-16 排序的,对于字母数字 你可以利用 ASCII 进行记忆

[3, 15, 8, 29, 102, 22].sort();

// [102, 15, 22, 29, 3, 8]

2、带函数的比较

[3, 15, 8, 29, 102, 22].sort((a,b) => (a - b));

// [3, 8, 15, 22, 29, 102]
  • 返回值大于0 即a-b > 0 , a 和 b 交换位置

  • 返回值大于0 即a-b < 0 , a 和 b 位置不变

  • 返回值等于0 即a-b = 0 , a 和 b 位置不变

    [3, 15, 8, 29, 102, 22].sort((a,b) => (b - a));

    // [102, 29, 22, 15, 8, 3]

深入浅出

Google Chrome 对 sort 做了特殊处理,对于长度 <= 10 的数组使用的是插入排序(稳定排序算法) ,>10 的数组使用的是快速排序。快速排序是不稳定的排序算法。

常用的时间复杂度所耗费的时间从小到大依次是

O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n³) < O(2^n) < O(n!) < O(n^n)