1
17
几年前,我花了一些时间尽可能地优化功能快速排序。下面是我为香草做的
我能用一种习惯做得更好
正因为如此,上面的内容还是相当迅速的。它是“半”尾递归(你不能在不变得非常难看的情况下进行尾递归快速排序)。更重要的是,它首先从尾部重新构建,这样产生的中间列表比传统方法少得多。 需要注意的是 不 在scala中使用最优雅或最惯用的快速排序方法,它正好可以很好地工作。在编写合并排序时,您可能会获得更多的成功,这通常是一种在函数语言中实现的更快的算法(更不用说更干净)。 |
2
5
我想这取决于你所说的“惯用语”是什么意思。快速排序的主要优点是它是一种非常快速的就地排序算法。所以,如果你不能在适当的地方分类,你就失去了它的所有优势——但是你仍然坚持它 数字化信息系统 优势。 这是我为罗塞塔代码写的一些关于这个主题的代码。它仍然没有进行排序,但是,另一方面,它对任何新的集合进行排序:
|
3
4
碰巧,我最近试图解决这个完全相同的问题。我希望将经典算法(即进行就地排序的算法)转换为尾部递归形式。 如果您仍然感兴趣,可以在这里看到我推荐的解决方案: Quicksort rewritten in tail-recursive form - An example in Scala 本文还包含将初始实现转换为尾部递归形式所遵循的步骤。 |
4
0
我做了一些实验,试图用一种纯粹的功能风格来写Quicksort。这是我得到的( Quicksort.scala ):
|
davidzxc574 · 将字符串缩放为字符 2 年前 |
yic_l · 什么是“!”在这个函数中是什么意思? 2 年前 |
Jelly · Scala:用于理解递归未来 2 年前 |
bbgghh · 在scala中连接两个列表时如何处理不匹配的键 2 年前 |
Iheb Mar · 卡夫卡制作人/消费者粉碎每一秒的API调用 2 年前 |
B. Bal · 在Scala中重用类成员 2 年前 |