factor/extra/sorting/heap/heap.factor

20 lines
514 B
Factor

! Copyright (C) 2014 John Benediktsson
! See http://factorcode.org/license.txt for BSD license
USING: assocs fry heaps kernel sequences vectors ;
IN: sorting.heap
: heapsort-with ( seq quot: ( elt -- key ) -- sorted-seq )
[
over length <vector> min-heap boa
[ '[ dup @ _ heap-push ] each ] keep
] [
drop [ length ] keep new-resizable
[ '[ drop _ push ] slurp-heap ] keep
] [
drop like
] 2tri ; inline
: heapsort ( seq -- sorted-seq ) [ ] heapsort-with ;