2010-04-22 73 views
5

是否有可能在Scala中执行this类型的事情?Scala中的惰性快速排序

+5

恕我直言,一个问题应该是自包含的。有关更多细节的链接都可以,但在此引用两行haskell代码不会有太多工作。 – 2011-05-11 18:47:07

回答

1

是的!

Scala支持“延迟vals”作为延迟计算值直到实际使用的方式。大多数Scala 2.8库能够处理懒惰定义的集合。

+0

这不回答问题。 – 2014-10-22 14:09:25

13
def quicksort[A](xs: Stream[A])(implicit o: Ordering[A]): Stream[A] = { 
    import o._ 
    if (xs.isEmpty) xs else { 
     val (smaller, bigger) = xs.tail.partition(_ < xs.head) 
     quicksort(smaller) #::: xs.head #:: quicksort(bigger) 
    } 
} 

可以在享有进行为好,尽管它势必要慢得多:

def quicksort[A](xs: List[A])(implicit o: Ordering[A]) = { 
    import o._ 
    def qs(xs: SeqView[A, List[A]]): SeqView[A, Seq[_]] = if (xs.isEmpty) xs else { 
    val (smaller, bigger) = xs.tail.partition(_ < xs.head) 
    qs(smaller) ++ (xs.head +: qs(bigger)) 
    } 
    qs(xs.view) 
} 
+0

谢谢,但我希望看到列表视图实现。 – Mahesh 2010-04-22 16:08:23

+0

@Mahesh视图实现结果比我想象的要困难得多。我会继续尝试看看是否有效。 – 2010-04-22 21:36:06

+0

@Mahesh好的,解决了这个问题。我忘记了连接线上的'.head' ......傻了。 – 2010-04-22 22:31:39