The sorted-vec is ~4 times faster than Clojure's sort (on my humble
old machine):

user=> (def v (vec (take 10000 (repeatedly #(rand-int 100000)))))
#'user/v
user=> (time(dotimes [_ 1000] (sort v)))
"Elapsed time: 23945.682336 msecs"
nil
user=> (time(dotimes [_ 1000] (sorted-vec v)))
"Elapsed time: 6030.585433 msecs"

BTW we have state here (the native Java array). Is it thread safe ?

On Jan 2, 11:04 pm, Meikel Brandmeyer <m...@kotka.de> wrote:
> Hi,
>
> Am 02.01.2010 um 20:17 schrieb ianp:
>
> >> A bit uglier, but ought to be quite fast.
>
> > Doesn't need to be that ugly, this looks OK to me at least:
>
> > (defn sorted-vec [coll]
> >  (doto (into-array coll)
> >    (java.util.Arrays/sort)
> >    (vec)))
>
> > It'd also be possible to generalise the return type by passing in a fn
> > to apply to the sorted array.
>
> Unfortunately the above code does not work, because it returns the array and 
> not the vector.
>
> (defn sorted-vec
>   [coll]
>   (let [arr (into-array coll)]
>     (java.util.Array/sort arr)
>     (vec arr)))
>
> How fast is vec on an array? Isn't there a LazilyPersistentVector which just 
> wraps the array?
>
> Sincerely
> Meikel

-- 
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