实现sort js
实现 JavaScript 排序
JavaScript 提供了多种排序方法,可以根据不同需求选择适合的实现方式。以下是常见的几种方法:
使用 Array.prototype.sort()
JavaScript 数组原生提供 sort() 方法,默认按字符串 Unicode 码点排序。对于数字排序,需要传入比较函数:
const numbers = [3, 1, 4, 1, 5, 9];
numbers.sort((a, b) => a - b); // 升序
numbers.sort((a, b) => b - a); // 降序
自定义比较函数
对于复杂对象的排序,可以自定义比较逻辑:
const items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 }
];
items.sort((a, b) => a.value - b.value); // 按 value 升序
items.sort((a, b) => a.name.localeCompare(b.name)); // 按 name 字母顺序
实现稳定排序
原生 sort() 在某些浏览器中不稳定,可以通过添加索引实现稳定排序:
const stableSort = (arr, compare) => {
const indexedArr = arr.map((item, index) => ({ item, index }));
indexedArr.sort((a, b) => compare(a.item, b.item) || a.index - b.index);
return indexedArr.map(({ item }) => item);
};
性能优化
对于大型数组,可以考虑非比较排序算法如计数排序或桶排序:
function countingSort(arr) {
const max = Math.max(...arr);
const count = Array(max + 1).fill(0);
arr.forEach(num => count[num]++);
const result = [];
count.forEach((freq, num) => {
for (let i = 0; i < freq; i++) {
result.push(num);
}
});
return result;
}
多条件排序
当需要按多个属性排序时,可以链式比较:
const people = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 }
];
people.sort((a, b) => {
const nameCompare = a.name.localeCompare(b.name);
return nameCompare !== 0 ? nameCompare : a.age - b.age;
});
选择排序方法时应考虑数据规模、排序稳定性以及性能需求。原生 sort() 适合大多数场景,特殊需求时可选择自定义实现。







