2010-04-22 58 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