6

有可能在 Scala 中做这种事情吗?

4

2 回答 2

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)
}
于 2010-04-22T15:19:04.427 回答
0

是的!

Scala 支持“惰性 vals”作为一种将值的计算推迟到实际使用的方法。Scala 2.8 的大部分库都能够处理延迟定义的集合。

于 2010-04-22T13:13:53.713 回答