实现js sort
实现 JavaScript 的 sort 方法
JavaScript 的 sort 方法用于对数组元素进行排序,默认按字符串 Unicode 码点排序。以下是几种常见的实现方式和注意事项。
基本用法
默认情况下,sort 会将元素转换为字符串并比较 Unicode 码点:
const arr = [10, 2, 5, 1];
arr.sort(); // 结果为 [1, 10, 2, 5]
自定义排序函数
通过传递比较函数,可以实现数字或其他复杂类型的排序:
const arr = [10, 2, 5, 1];
arr.sort((a, b) => a - b); // 升序排序,结果为 [1, 2, 5, 10]
arr.sort((a, b) => b - a); // 降序排序,结果为 [10, 5, 2, 1]
对象数组排序
对对象数组按某个属性排序:

const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
users.sort((a, b) => a.age - b.age); // 按 age 升序排序
字符串排序
对字符串数组按字母顺序排序(区分大小写):
const names = ['Alice', 'bob', 'Charlie'];
names.sort(); // 结果为 ['Alice', 'Charlie', 'bob']
不区分大小写的排序:

names.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' }));
稳定性
现代 JavaScript 引擎实现了稳定的排序(相同值的元素顺序不变),但早期版本可能不稳定。
性能注意事项
sort 的时间复杂度通常为 O(n log n),但具体实现取决于浏览器或 Node.js 的引擎。
手动实现快速排序
以下是一个简单的快速排序实现:
function quickSort(arr) {
if (arr.length <= 1) return arr;
const pivot = arr[0];
const left = [];
const right = [];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < pivot) left.push(arr[i]);
else right.push(arr[i]);
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
注意事项
sort会修改原数组- 比较函数应返回负数、零或正数
- 对于大型数组,内置
sort通常比手动实现的算法更高效






