factor/basis/sorting/insertion/insertion.factor

20 lines
569 B
Factor
Raw Normal View History

USING: kernel locals math sequences sequences.private ;
IN: sorting.insertion
<PRIVATE
:: insert ( ... seq quot: ( ... elt -- ... elt' ) n -- ... )
n zero? [
n n 1 - [ seq nth-unsafe ] bi@
2dup [ quot call ] bi@ >= [ 2drop ] [
n 1 - n [ seq set-nth-unsafe ] bi-curry@ bi*
seq quot n 1 - insert
] if
2008-07-18 20:22:59 -04:00
] unless ; inline recursive
PRIVATE>
2011-09-22 20:19:51 -04:00
: insertion-sort ( ... seq quot: ( ... elt -- ... elt' ) -- ... )
! quot is a transformation on elements
over length [ insert ] 2with 1 -rot (each-integer) ; inline