-USING: arrays assocs kernel kernel.private locals math
-math.order sequences sequences.private sorting ;
+USING: arrays assocs kernel kernel.private math math.order
+sequences sequences.extras sequences.private sorting ;
IN: sorting.extras
: argsort ( seq quot: ( obj1 obj2 -- <=> ) -- sortedseq )
- [ dup length iota zip ] dip
+ [ zip-index ] dip
[ [ first-unsafe ] bi@ ] prepose
sort [ second-unsafe ] map! ; inline
: map-sort ( ... seq quot: ( ... elt -- ... key ) -- ... sortedseq )
- [ map ] curry keep zip
+ [ keep ] curry { } map>assoc
[ { array } declare first-unsafe ] sort-with
[ { array } declare second-unsafe ] map ; inline
: insort-right ( obj seq -- seq' )
[ bisect-right ] 2keep swapd insert-nth ;
+
+: insort-left! ( obj seq -- seq )
+ [ bisect-left ] 2keep swapd [ insert-nth! ] keep ;
+
+: insort-right! ( obj seq -- seq )
+ [ bisect-right ] 2keep swapd [ insert-nth! ] keep ;