sorting.quick: faster by using stack variables not mutable locals.
parent
8ed47488e9
commit
b40f2ff544
|
@ -10,24 +10,19 @@ IN: sorting.quick
|
||||||
|
|
||||||
:: (quicksort) ( seq from to -- )
|
:: (quicksort) ( seq from to -- )
|
||||||
from to < [
|
from to < [
|
||||||
from to + 2/ :> p
|
from to + 2/ seq nth-unsafe :> pivot
|
||||||
from :> l!
|
|
||||||
to :> r!
|
|
||||||
|
|
||||||
p seq nth-unsafe :> p-nth
|
from to [ 2dup <= ] [
|
||||||
|
[ over seq nth-unsafe pivot before? ] [ [ 1 + ] dip ] while
|
||||||
[ l r <= ] [
|
[ dup seq nth-unsafe pivot after? ] [ 1 - ] while
|
||||||
[ l seq nth-unsafe p-nth before? ] [ l 1 + l! ] while
|
2dup <= [
|
||||||
[ r seq nth-unsafe p-nth after? ] [ r 1 - r! ] while
|
[ seq exchange-unsafe ]
|
||||||
l r <= [
|
[ [ 1 + ] [ 1 - ] bi* ] 2bi
|
||||||
l r seq exchange-unsafe
|
|
||||||
l 1 + l!
|
|
||||||
r 1 - r!
|
|
||||||
] when
|
] when
|
||||||
] while
|
] while
|
||||||
|
|
||||||
seq from r (quicksort)
|
[ seq from ] dip (quicksort)
|
||||||
seq l to (quicksort)
|
[ seq ] dip to (quicksort)
|
||||||
|
|
||||||
] when ; inline recursive
|
] when ; inline recursive
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue