% Quicksort % % Chris Collins % 17-Sep-2001 /qsort { dup length 1 gt { << exch /xlt [ ] /xgt [ ] /x 6 5 roll dup 0 get exch dup length 1 sub 1 exch getinterval /xs exch >> begin 0 1 xs length 1 sub { xs exch get dup x lt exch [ exch 3 2 roll { xlt aload pop ] /xlt } { xgt aload pop ] /xgt } ifelse exch store } for [ xlt qsort aload pop x xgt qsort aload pop ] end } if } def [ 5 2 5 7 9 3 ] qsort == [ 3 5 2 1 5 2 9 6 3 5 7 ] qsort ==