实现sort js
实现 JavaScript 排序
在 JavaScript 中,可以通过多种方式实现数组排序。以下是几种常见的方法:
使用 Array.prototype.sort()
JavaScript 提供了内置的 sort() 方法,可以对数组进行排序。默认情况下,sort() 方法将元素转换为字符串并按 Unicode 码点排序。
const arr = [3, 1, 4, 1, 5, 9];
arr.sort(); // 默认排序
console.log(arr); // [1, 1, 3, 4, 5, 9]
自定义排序规则
可以通过传递一个比较函数来定义排序规则。比较函数接收两个参数 a 和 b,返回一个负数、零或正数来表示排序顺序。
const arr = [3, 1, 4, 1, 5, 9];
arr.sort((a, b) => a - b); // 升序排序
console.log(arr); // [1, 1, 3, 4, 5, 9]
arr.sort((a, b) => b - a); // 降序排序
console.log(arr); // [9, 5, 4, 3, 1, 1]
对象数组排序
对于对象数组,可以根据对象的某个属性进行排序。
const users = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 },
{ name: 'Charlie', age: 20 }
];
users.sort((a, b) => a.age - b.age); // 按年龄升序排序
console.log(users);
// [
// { name: 'Charlie', age: 20 },
// { name: 'Alice', age: 25 },
// { name: 'Bob', age: 30 }
// ]
实现自定义排序算法
如果需要手动实现排序算法,以下是快速排序的实现示例:
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)];
}
const arr = [3, 1, 4, 1, 5, 9];
const sortedArr = quickSort(arr);
console.log(sortedArr); // [1, 1, 3, 4, 5, 9]
处理 Unicode 字符串排序
对于字符串排序,可以使用 localeCompare() 方法处理 Unicode 字符。
const names = ['Alice', 'Bob', 'Charlie', 'álice'];
names.sort((a, b) => a.localeCompare(b));
console.log(names); // ['álice', 'Alice', 'Bob', 'Charlie']
稳定性问题
JavaScript 的 sort() 方法在 ES2019 后是稳定的(相同元素的相对顺序不变)。如果需要更早版本的稳定性,可以手动实现稳定排序。
function 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);
}
const arr = [{ value: 1 }, { value: 2 }, { value: 1 }];
const sortedArr = stableSort(arr, (a, b) => a.value - b.value);
console.log(sortedArr); // 保持相同元素的原始顺序
以上方法涵盖了 JavaScript 中排序的常见需求,可以根据具体场景选择合适的方式。







