Check out
Amanda Card’s
Shuffle