除了克隆数组然后对其进行排序的本地方式之外,是否存在更适合非破坏性排序的算法和现有实现?
需要在不更改源的情况下将浮点数组排序到新数组中。我的搜索结果相当薄,因为大多数文献都专注于通过就地排序来降低内存需求。
使用原生sorted = [].slice().sort()
工作正常。这个问题是关于理解是否存在其他高性能排序实现,因为无论如何都需要新的数组,因此删除了内存约束。
由于评论重复了几次:
shuffledArray.slice().sort()
是默认的方式。看作非破坏性排序的动机与编写功能代码有关,你正在看Ramda ...如果你还没有,请查看Facebook的ImmutableJS库。
特别是,Seq
。您可以开始在Seq
中存储浮点数组,对其进行排序,并确保原始Seq保持正确的顺序。此外,它还利用了Lazy评估。 http://facebook.github.io/immutable-js/docs/#/Seq
http://facebook.github.io/immutable-js/docs/#/Seq/sortBy
有一种更简单的语法,可以使用ES6扩展运算符对数组进行不可变的排序:
[...array].sort(sortFn)