稳定排序
对数组进行稳定排序,当元素的值相同时,保留它们的初始索引。
- 使用
Array.prototype.map()
将输入数组的每个元素与其对应的索引配对。 - 使用
Array.prototype.sort()
和一个compare
函数对列表进行排序,如果比较的项相等,则保留它们的初始顺序。 - 使用
Array.prototype.map()
将结果转换回初始数组的元素。 - 不会改变原始数组,而是返回一个新的数组。
const stableSort = (arr, compare) =>
arr
.map((item, index) => ({ item, index }))
.sort((a, b) => compare(a.item, b.item) || a.index - b.index)
.map(({ item }) => item);
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const stable = stableSort(arr, () => 0); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]