2010-04-22 11 views
5

क्या स्केल में this चीज की तरह करना संभव है?स्कैला में Lazy Quicksort

+5

IMHO, एक सवाल आत्म निहित होना चाहिए। अधिक जानकारी के लिए लिंक ठीक हैं, लेकिन यहां हैकेल-कोड की दो पंक्तियों का हवाला देते हुए बहुत अधिक काम नहीं होगा। –

उत्तर

1

हाँ!

स्कैला वास्तव में उपयोग किए जाने तक मूल्य की गणना को स्थगित करने के तरीके के रूप में "आलसी vals" का समर्थन करता है। स्कैला 2.8 लाइब्रेरी में से अधिकांश आलसी परिभाषित संग्रह के साथ काम करने में सक्षम है।

+0

यह पूछे जाने वाले प्रश्न का उत्तर नहीं देता है। –

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

+0

@ माहेश दृश्य दृश्य कार्यान्वयन मैंने पहले कल्पना की तुलना में कठिन हो गया है। मैं यह देखने की कोशिश करता रहूंगा कि कुछ काम करता है या नहीं। –

+0

@ माहेश ओके, समस्या को लोहे से बाहर कर दिया गया। मैं concatenation लाइन पर '.head' भूल रहा था ... मुझे मूर्खतापूर्ण। –