quicksort written by common lisp

(defmacro while (test &rest body)
 `(do ()
     ((not ,test))
     ,@body))

(defun quick-sort (vec l r)
 (let ((i l)
       (j r)
       (key (svref vec l)))
  (if (< i j)
   (progn
    (while (< i j)
     (progn
      (while (and (< i j) (> (svref vec j) key)) (decf j))
      (if (< i j)
       (progn
        (setf (svref vec i) (svref vec j))
        (incf i)))
      (while (and (< i j) (< (svref vec i) key)) (incf i))
      (if (< i j)
       (progn
        (setf (svref vec j) (svref vec i))
        (decf j)))))
    (setf (svref vec i) key)
    (if (> (1- i) l)
     (quick-sort vec l (1- i)))
    (if (< (1+ i) r)
     (quick-sort vec (1+ i) r))))))

(setf vec (vector 1 4 5 2 8 8 3))
(quick-sort vec 0 (1- (length vec)))
(format t "~a" vec)

你可能感兴趣的:(sort,lisp,Quick)