14 lines
476 B
Common Lisp
14 lines
476 B
Common Lisp
(defun quickselect (n _list)
|
|
(let* ((ys (remove-if (lambda (x) (< (car _list) x)) (cdr _list)))
|
|
(zs (remove-if-not (lambda (x) (< (car _list) x)) (cdr _list)))
|
|
(l (length ys))
|
|
)
|
|
(cond ((< n l) (quickselect n ys))
|
|
((> n l) (quickselect (- n l 1) zs))
|
|
(t (car _list)))
|
|
)
|
|
)
|
|
|
|
(defparameter a '(9 8 7 6 5 0 1 2 3 4))
|
|
(format t "~a~&" (mapcar (lambda (x) (quickselect x a)) (loop for i from 0 below (length a) collect i)))
|