Open In App

Shuffle a deck of cards

Last Updated : 21 Jun, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

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++




// C++ program for shuffling desk of cards.
#include <bits/stdc++.h>
using namespace std;
 
// Function which shuffle and print the array
void 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 code
int 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




// Java Code for Shuffle a deck of cards
import 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




# Python3 program for shuffling desk of cards
# Function which shuffle and print the array
 
import random
def 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 code
if __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#




// C# Code for Shuffle a deck of cards
using 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.


Javascript




// JavaScript Implementation of the above approach
 
// Function which shuffle and print the array
function shuffle(card, n) {
  // Initialize seed randomly
  for (let i = 0; i < n; i++) {
    // Random for remaining positions.
    let r = i + (Math.floor(Math.random() * (52 - i)));
    let tmp = card[i];
    card[i] = card[r];
    card[r] = tmp;
  }
}
 
// Driver code
  let 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);
  console.log(a);


Output:

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

Time Complexity: O(n)
Space Complexity: O(1)

Note : Output will be different each time because of the random function used in the program. Please refer Shuffle a given array for details. 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads