And also qsort may take up to n stack frames for collection of n
elements if you partition function is not optimal. In your case - if
input collection is sorted (as long as you split by first element).

On Tue, Dec 28, 2010 at 11:13 PM, Petr Gladkikh <petrg...@gmail.com> wrote:
> Why do you call qsort* inside of partify? I do not really grasp your
> logic behind this.
>
> On Tue, Dec 28, 2010 at 8:20 PM, Baishampayan Ghose <b.gh...@gmail.com> wrote:
>> Hello,
>>
>> I tried writing a naive implementation of quicksort using an
>> accumulator. Right now, the code is stack-consuming and returns a
>> stackoverflowerror on large lists. Is there any way to prevent it from
>> consuming stack with some changes? The code is as follows -
>>
>> (declare qsort qsort* partify)
>>
>> (defn partify
>>  [item coll [less equal greater] acc]
>>  (if (empty? coll)
>>    (qsort* less (concat equal (qsort* greater acc)))
>>    (let [[head & tail] coll]
>>      (cond
>>       (< head item) (recur item tail [(cons head less) equal greater] acc)
>>       (> head item) (recur item tail [less equal (cons head greater)] acc)
>>       :else (recur item tail [less (cons head equal) greater] acc)))))
>>
>> (defn qsort*
>>  [coll acc]
>>  (if-let [coll (seq coll)]
>>    (partify (first coll) (rest coll) [[] [(first coll)] []] acc)
>>    acc))
>>
>> (defn qsort
>>  "Perform Quicksort, with apologies to C.A.R. Hoare"
>>  [coll]
>>  (if-let [coll (seq coll)]
>>    (qsort* coll [])
>>    []))
>>
>> Regards,
>> BG
>>
>> --
>> Baishampayan Ghose
>> b.ghose at gmail.com
>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>
>
>
> --
> Petr Gladkikh
>



-- 
Petr Gladkikh

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to