Стабильная сортировка
Для выполнения стабильной сортировки массива и сохранения исходных индексов элементов с одинаковыми значениями следуйте шагам:
- Откройте Терминал/SSH и введите
node
, чтобы начать практиковать программирование.
- Используйте
Array.prototype.map()
, чтобы сопоставить каждый элемент входного массива с его соответствующим индексом.
- Используйте
Array.prototype.sort()
вместе с функцией compare
, чтобы отсортировать список, сохраняя исходный порядок, если сравниваемые элементы равны.
- Используйте
Array.prototype.map()
снова, чтобы преобразовать элементы массива обратно в их исходную форму.
- Исходный массив не изменяется, вместо этого возвращается новый массив.
Вот реализация функции stableSort
на JavaScript:
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);
Вы можете вызвать функцию stableSort
с массивом и функцией compare
, чтобы получить новый массив с отсортированными элементами, как показано ниже:
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]