js实现列表排序
数组排序方法
JavaScript提供了内置的Array.prototype.sort()方法,可以对数组进行原地排序。默认情况下,sort()将元素转换为字符串并按照UTF-16代码单元顺序进行排序。
const fruits = ['banana', 'apple', 'orange'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'orange']
数字排序
对于数字数组,直接使用sort()可能不会得到预期结果,因为默认按字符串比较。需要提供比较函数:

const numbers = [40, 100, 1, 5, 25];
numbers.sort((a, b) => a - b); // 升序
console.log(numbers); // [1, 5, 25, 40, 100]
numbers.sort((a, b) => b - a); // 降序
console.log(numbers); // [100, 40, 25, 5, 1]
对象数组排序
当需要对对象数组根据某个属性排序时,同样需要使用比较函数:

const items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 }
];
// 按value属性升序
items.sort((a, b) => a.value - b.value);
// 按name属性排序
items.sort((a, b) => {
const nameA = a.name.toUpperCase();
const nameB = b.name.toUpperCase();
if (nameA < nameB) return -1;
if (nameA > nameB) return 1;
return 0;
});
稳定排序
ES2019规定sort()必须是稳定排序。对于具有相同排序键的元素,它们将保持原始顺序:
const data = [
{ name: 'A', age: 20 },
{ name: 'B', age: 30 },
{ name: 'C', age: 20 }
];
data.sort((a, b) => a.age - b.age);
// 两个age为20的项保持原始相对顺序
自定义排序算法
如果需要实现特定排序算法,可以手动编写:
// 冒泡排序实现
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
性能考虑
对于大型数组,内置的sort()方法通常比手动实现的算法更高效,因为JavaScript引擎会针对不同情况使用优化的排序算法(如快速排序、插入排序等混合策略)。






