Перетасовывание колоды карт - PullRequest
12 голосов
/ 02 ноября 2010

Я делаю класс Deck для программы на C ++.У него должно быть два метода: один, чтобы вытолкнуть карту из верхней части колоды, другой, чтобы перетасовать колоду.Меня беспокоит последнее.

Карты представлены в виде целых чисел от 1 до 52 включительно.Какой самый быстрый алгоритм для перетасовки колоды (при условии «хорошего» уровня случайности)?

Ответы [ 3 ]

26 голосов
/ 02 ноября 2010

Если вы хотите реализовать тасование самостоятельно, очень простой, но также функциональный алгоритм тасования: Фишер-Йейтс перемешивание .

Чтобы перетасовать массив a из n элементов:

for i from n − 1 downto 1 do
   j ← random integer with 0 ≤ j ≤ i
   exchange a[j] and a[i]

Конечно, в стандартной библиотеке C ++ также реализованы такие вещи, как std::random_shuffle, включенные через заголовок <algorithm>.

8 голосов
/ 02 ноября 2010

Используйте std::random_shuffle, чтобы перетасовать колоду.

4 голосов
/ 02 ноября 2010
...