12 lines
447 B
Racket
12 lines
447 B
Racket
(define (quickselect A k)
|
|
(define pivot (list-ref A (random (length A))))
|
|
(define A1 (filter (curry > pivot) A))
|
|
(define A2 (filter (curry < pivot) A))
|
|
(cond
|
|
[(<= k (length A1)) (quickselect A1 k)]
|
|
[(> k (- (length A) (length A2))) (quickselect A2 (- k (- (length A) (length A2))))]
|
|
[else pivot]))
|
|
|
|
(define a '(9 8 7 6 5 0 1 2 3 4))
|
|
(display (string-join (map number->string (for/list ([k 10]) (quickselect a (+ 1 k)))) ", "))
|