Функциональная неразрушающая сортировка массива

Помимо собственного способа клонирования массива и последующего его сортировки, существует ли алгоритм и существующая реализация, более подходящая для неразрушающей сортировки?

Нужно сортировать массив поплавков в новый массив без изменения источника. Мои результаты поиска были довольно тонкими, так как большая часть литературы сосредоточена на сокращении потребностей в памяти с помощью сортировки на месте.

Использование native sorted = [].slice().sort() отлично работает. Этот вопрос заключается в понимании того, существуют ли другие реализации сортировки исполнителей, когда ограничения памяти удаляются, так как в любом случае необходим новый массив.

Ответы

Ответ 1

Поскольку комментарии повторялись несколько раз:

  • .slice(). sort() - это способ по умолчанию.
  • Не совсем понятно, как мы могли бы использовать лучший алгоритм/метод, используя библиотеки, которые вы упомянули.

Увидев, что мотивация неразрушающей сортировки связана с написанием функционального кода, и вы смотрите на Ramda... проверьте библиотеку Facebook ImmutableJS, если вы еще этого не сделали.

В частности, Seq. Вы можете начать хранить свой массив поплавков в Seq, отсортировать его и убедиться, что исходный Seq остается в правильном порядке. Кроме того, он использует ленивую оценку. http://facebook.github.io/immutable-js/docs/#/Seq
http://facebook.github.io/immutable-js/docs/#/Seq/sortBy

Ответ 2

Там более простой синтаксис для неизменно сортировки массива с использованием оператора распространения ES6:

[...array].sort(sortFn)