Shuffle a deck of cards

17 Apr, 2019
Given a deck of cards, the task is to shuffle them.
Asked in Amazon Interview
Prerequisite : Shuffle a given array
Algorithm:
1. First, fill the array with the values in order.
2. Go through the array and exchange each element 
   with the randomly chosen element in the range 
   from itself to the end.

// It is possible that an element will be swap
// with itself, but there is no problem with that. 

C++
Java
Python3
C#
// C++ program for shuffling desk of cards.#include <bits/stdc++.h>using namespace std;  // Function which shuffle and print the arrayvoid shuffle(int card[], int n){    // Initialize seed randomly    srand(time(0));      for (int i=0; i<n ;i++)    {        // Random for remaining positions.        int r = i + (rand() % (52 -i));          swap(card[i], card[r]);    }}  // Driver codeint main(){    // Array from 0 to 51    int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8,               9, 10, 11, 12, 13, 14, 15,               16, 17, 18, 19, 20, 21, 22,               23, 24, 25, 26, 27, 28, 29,               30, 31, 32, 33, 34, 35, 36,               37, 38, 39, 40, 41, 42, 43,               44, 45, 46, 47, 48, 49, 50,               51};      shuffle(a, 52);      // Printing all shuffled elements of cards    for (int i=0; i<52; i++)        cout << a[i] << " ";    cout << endl;      return 0;}
// Java Code for Shuffle a deck of cardsimport java.util.Random;  class GFG {          // Function which shuffle and print the array    public static void shuffle(int card[], int n)    {                  Random rand = new Random();                  for (int i = 0; i < n; i++)        {            // Random for remaining positions.            int r = i + rand.nextInt(52 - i);                           //swapping the elements             int temp = card[r];             card[r] = card[i];             card[i] = temp;                       }    }           // Driver code    public static void main(String[] args)     {        // Array from 0 to 51        int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8,                   9, 10, 11, 12, 13, 14, 15,                   16, 17, 18, 19, 20, 21, 22,                   23, 24, 25, 26, 27, 28, 29,                   30, 31, 32, 33, 34, 35, 36,                   37, 38, 39, 40, 41, 42, 43,                   44, 45, 46, 47, 48, 49, 50,                    51};               shuffle(a, 52);               // Printing all shuffled elements of cards        for (int i = 0; i < 52; i ++)           System.out.print(a[i]+" ");              }}// This code is contributed by Arnav Kr. Mandal
# Python3 program for shuffling desk of cards# Function which shuffle and print the array   import randomdef shuffle(card,n) :          # Initialize seed randomly    for i in range(n):                  # Random for remaining positions.        r = i + (random.randint(0,55) % (52 -i))        tmp=card[i]        card[i]=card[r]        card[r]=tmp#Driver codeif __name__=='__main__':    a=[0, 1, 2, 3, 4, 5, 6, 7, 8,       9, 10, 11, 12, 13, 14, 15,       16, 17, 18, 19, 20, 21, 22,        23, 24, 25, 26, 27, 28, 29,       30, 31, 32, 33, 34, 35, 36,       37, 38, 39, 40, 41, 42, 43,        44, 45, 46, 47, 48, 49, 50,       51]    shuffle(a,52)    print(a)         #this code is contributed by sahilshelangia
// C# Code for Shuffle a deck of cardsusing System;  class GFG {          // Function which shuffle and     // print the array    public static void shuffle(int []card,                                int n)    {                  Random rand = new Random();                  for (int i = 0; i < n; i++)        {                          // Random for remaining positions.            int r = i + rand.Next(52 - i);                          //swapping the elements            int temp = card[r];            card[r] = card[i];            card[i] = temp;                      }    }          // Driver code    public static void Main()     {        // Array from 0 to 51        int []a = {0, 1, 2, 3, 4, 5, 6, 7, 8,                   9, 10, 11, 12, 13, 14, 15,                   16, 17, 18, 19, 20, 21, 22,                   23, 24, 25, 26, 27, 28, 29,                   30, 31, 32, 33, 34, 35, 36,                   37, 38, 39, 40, 41, 42, 43,                   44, 45, 46, 47, 48, 49, 50,                    51};              shuffle(a, 52);              // Printing all shuffled elements of cards        for (int i = 0; i < 52; i ++)        Console.Write(a[i]+" ");              }}  // This code is contributed by Nitin Mittal.
29 27 20 23 26 21 35 51 15 18 46 32 33 19 
24 30 3 45 40 34 16 11 36 50 17 10 7 5 4 
39 6 47 38 28 13 44 49 1 8 42 43 48 0 12 
37 41 25 2 31 14 22

Note : Output will be different each time because of the random function used in the program.Please refer Shuffle a given array for details.
This article is contributed by Sahil Rajput. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
nitin mittal
sahilshelangia
imSaiful
Randomized
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Generating Random String Using PHP
Operations on Sparse Matrices
Random Walk (Implementation in Python)
Primality Test | Set 2 (Fermat Method)
Randomized Algorithms | Set 1 (Introduction and Analysis)
Birthday Paradox
Randomized Binary Search Algorithm
Expected Number of Trials until Success
Number guessing game in C
Generate 0 and 1 with 25% and 75% probability