Check out
Eric Koster’s
Shuffle