Fisher-Yates Shuffle: Randomly Shuffle a List in-Place

The Fisher-Yates Shuffle is named after statisticians Ronald Fisher and Frank Yates, who developed the original algorithm in 1938. In 1964, Richard Durstenfeld developed a more modern version of the algorithm which improved upon its asymptotic complexity and was optimized for use with computers. Donald Knuth published this modernized version of the Fisher-Yates Shuffle in his 1968 book, The Art of Computer Programming. For this reason, the Fisher-Yates Shuffle is also known as the Knuth Shuffle.