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.