Динамическое чтение COBOL переопределяет с помощью C #

Я отправляю правильную реализацию алгоритма перетасовки, так как другой, опубликованный здесь, не создает равномерного тасования.

Как и в другом ответе, для небольшого числа значений, которые должны быть рандомизированы , вы можете просто заполнить массив этими значениями, перетасовать массив, а затем использовать любое количество значений, которые вы хотите.

Ниже приведена реализация Fisher-Yates Shuffle

g0] (также известный как Knuth Shuffle). (Прочитайте раздел «ошибки реализации» этой ссылки (найдите «всегда выбирая j из всего диапазона допустимых индексов массива на каждой итерации»), чтобы увидеть некоторое обсуждение того, что не так с другой реализацией, размещенной здесь.)

using System;
using System.Collections.Generic;

namespace ConsoleApplication2
{
    static class Program
    {
        static void Main(string[] args)
        {
            Shuffler shuffler = new Shuffler();
            List list = new List{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            shuffler.Shuffle(list);

            foreach (int value in list)
            {
                Console.WriteLine(value);
            }
        }
    }

    /// Used to shuffle collections.

    public class Shuffler
    {
        /// Creates the shuffler with a  as the random number generator.

        public Shuffler()
        {
            _rng = new Random();
        }

        /// Shuffles the specified array.
        /// The type of the array elements.
        /// The array to shuffle.

        public void Shuffle(IList array)
        {
            for (int n = array.Count; n > 1; )
            {
                int k = _rng.Next(n);
                --n;
                T temp = array[n];
                array[n] = array[k];
                array[k] = temp;
            }
        }

        private System.Random _rng;
    }
}

7
задан Daniel Dennis 7 March 2016 в 14:54
поделиться