Shuffle a deck of cards (original) (raw)

Last Updated : 23 Jul, 2025

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.