C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
In Main: We use the Shuffle(T) method on integers and strings. It is equally effective on all types.
Shuffle, max: We use the maximum bound of the loop of "n-1" as the last index does not need to touched in the loop—it is already shuffled.
Results: The Shuffle method rearranged the 9-element int array, and the 3-element string array, so they are not in their original orders.
Int ArrayC# program that implements generic Fisher-Yates shuffle
using System;
class Program
{
/// <summary>
/// Used in Shuffle(T).
/// </summary>
static Random _random = new Random();
/// <summary>
/// Shuffle the array.
/// </summary>
/// <typeparam name="T">Array element type.</typeparam>
/// <param name="array">Array to shuffle.</param>
static void Shuffle<T>(T[] array)
{
int n = array.Length;
for (int i = 0; i < (n - 1); i++)
{
// Use Next on random instance with an argument.
// ... The argument is an exclusive bound.
// So we will not go past the end of the array.
int r = i + _random.Next(n - i);
T t = array[r];
array[r] = array[i];
array[i] = t;
}
}
static void Main()
{
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Shuffle(array);
Console.WriteLine("SHUFFLE: {0}", string.Join(",", array));
string[] array2 = { "bird", "frog", "cat" };
Shuffle(array2);
Console.WriteLine("SHUFFLE: {0}", string.Join(",", array2));
}
}
Output
SHUFFLE: 3,5,7,8,6,9,1,2,4
SHUFFLE: cat,frog,bird
Princeton: This code the same as the Java shuffle algorithm from the Princeton computer science introductory course.
Arrays: Princeton.eduMath.random: In Java, the Math.random method returns a double between 0 and 1. The NextDouble method in C# is equivalent.
Note: Thanks to Darrin Henning, and Peter Minarik, for pointing out flaws in previous versions of the code here.
So: The implementation may have been wrong. Currently the method is based on code from a CS textbook used at Princeton University.