(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)