(defun partition (vector pivot min max less)
(loop until (> min max)
do (loop until (or (> min max)
(funcall less pivot (aref vector min)))
do (incf min))
(loop until (or (> min max)
(funcall less (aref vector max) pivot))
do (decf max))
(unless (> min max)
(rotatef (aref vector min) (aref vector max))
(incf min)
(decf max)))
min)