(defun quicksort-aux (vector min max less)
(unless (<= max min)
(rotatef (aref vector (floor (+ min max) 2)) (aref vector min))
(let ((p (partition vector (aref vector min) (1+ min) max less)))
(rotatef (aref vector min) (aref vector (1- p)))
(quicksort-aux vector min (- p 2) less)
(quicksort-aux vector p max less))))
(defun quicksort (vector less)
(quicksort-aux vector 0 (1- (length vector)) less)
vector)