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))