稳定排序

对数组进行稳定排序,当元素的值相同时,保留它们的初始索引。

  • 使用 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]