Name: Anonymous 2008-03-08 8:38
LISP
(define (radix-sort list radix)
(define (vector-mutate! v i f) (vector-set! v i (f (vector-ref v i))))
(let loop ((list (map cons list list)))
(if (zero? (apply + (map cdr list)))
(map car list)
(do ((list list (cdr list)) (buckets (make-vector radix '())))
((null? list) (loop (apply append (map reverse (vector->list buckets)))))
(vector-mutate!
buckets (remainder (cdar list) radix)
(lambda (x) (cons (cons (caar list) (quotient (cdar list) radix)) x)))))))