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)

转载于:https://my.oschina.net/u/1172335/blog/170135

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值