From: Francis Sergeraert
Subject: Re: WANTED: Card shuffling algorithm
Date:
Message-ID: <CLME6C.B1w@imag.fr>
(defun random-shuffle (n)
(declare (type fixnum n))
(let ((array (make-array n :element-type 'fixnum))
(result (make-array n :element-type 'fixnum)))
(dotimes (i n)
(setf (aref array i) i))
(do ((i n (1- i)))
((zerop i))
(declare (type fixnum i))
(let ((k (random i)))
(declare (type fixnum k))
(setf (aref result (1- i)) (aref array k))
(setf (aref array k) (aref array (1- i)))))
result))