js 实现sort
JavaScript 实现 sort 方法
JavaScript 中的 Array.prototype.sort 方法用于对数组元素进行排序。默认情况下,sort 方法将元素转换为字符串,并按照 Unicode 码点顺序排序。如果需要自定义排序逻辑,可以传入一个比较函数。
默认排序(按 Unicode 码点)
默认情况下,sort 方法会将数组元素转换为字符串,然后比较它们的 Unicode 码点值。例如:
const arr = [10, 2, 1, 20];
arr.sort(); // 结果为 [1, 10, 2, 20]
自定义排序(传入比较函数)
可以通过传入一个比较函数来实现自定义排序逻辑。比较函数接收两个参数 a 和 b,返回值决定排序顺序:

- 返回负数:
a排在b前面。 - 返回正数:
b排在a前面。 - 返回 0:顺序不变。
升序排序
const arr = [10, 2, 1, 20];
arr.sort((a, b) => a - b); // 结果为 [1, 2, 10, 20]
降序排序
const arr = [10, 2, 1, 20];
arr.sort((a, b) => b - a); // 结果为 [20, 10, 2, 1]
对象数组排序
对于对象数组,可以根据对象的某个属性排序:
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 20 },
{ name: 'Charlie', age: 30 }
];
users.sort((a, b) => a.age - b.age); // 按 age 升序排序
字符串排序
字符串排序可以直接使用 localeCompare 方法:

const names = ['Alice', 'Bob', 'Charlie', 'alice'];
names.sort((a, b) => a.localeCompare(b)); // 结果为 ['Alice', 'alice', 'Bob', 'Charlie']
稳定排序
从 ES2019 开始,sort 方法被要求是稳定的(即相同值的元素在排序后保持原有顺序)。例如:
const arr = [
{ value: 1, index: 0 },
{ value: 1, index: 1 },
{ value: 2, index: 2 }
];
arr.sort((a, b) => a.value - b.value); // 相同 value 的元素保持原有顺序
性能注意事项
sort 方法的时间复杂度和具体实现有关,但通常为 O(n log n)。对于大型数组,建议避免在比较函数中执行复杂操作。
手动实现排序(示例:冒泡排序)
如果需要手动实现排序算法,以下是冒泡排序的示例:
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len; i++) {
for (let j = 0; j < len - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; // 交换元素
}
}
}
return arr;
}
const arr = [10, 2, 1, 20];
bubbleSort(arr); // 结果为 [1, 2, 10, 20]






