对数组进行排序以对匹配元素进行分组,但保持原始顺序,通常涉及到一种称为“稳定排序”的算法。稳定排序算法在排序过程中会保持相等元素的相对顺序。这意味着如果两个元素相等,它们在排序后的数组中的顺序与它们在原始数组中的顺序相同。
常见的稳定排序算法包括:
以下是一个使用JavaScript实现稳定排序的示例代码:
function stableSort(arr, compareFn) {
return arr.map((item, index) => ({ item, index }))
.sort((a, b) => compareFn(a.item, b.item) || a.index - b.index)
.map(({ item }) => item);
}
// 示例数组
const arr = [
{ value: 3, originalIndex: 0 },
{ value: 1, originalIndex: 1 },
{ value: 2, originalIndex: 2 },
{ value: 1, originalIndex: 3 }
];
// 按 value 排序,保持原始顺序
const sortedArr = stableSort(arr, (a, b) => a.value - b.value);
console.log(sortedArr);
问题:为什么使用不稳定排序算法会导致元素顺序混乱?
原因:不稳定排序算法在排序过程中可能会改变相等元素的相对顺序,导致分组时无法保持原始顺序。
解决方法:
通过以上方法,可以有效地对数组进行排序并保持匹配元素的原始顺序,便于后续的分组操作。
领取专属 10元无门槛券
手把手带您无忧上云