# C++ Notes: Example - Shuffle Array

Suppose you want an array of 52 values, from 0 to 51 with no repeats, in a random order, such as you might want for a deck of cards. First fill the array with the values in order, then go thru the array and exchange each element with a randomly chosen element. It's possible that an element will be exchanged with itself, but there is no problem with that.

      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
    // random/deal.cpp - Randomly shuffle deck of cards.
    // Illustrates : Shuffle algorithm, srand, rand.
    // Improvements: Use classes for Card and Deck.
    // Author      : Fred Swartz 2003-08-24

    #include <iostream>
    #include <cstdlib>   // for srand and rand
    #include <ctime>     // for time
    using namespace std;

    int main() {
        int card[52];    // array of cards;
        int n;           // number of cards to deal
        srand(time(0));  // initialize seed "randomly"

        for (int i=0; i<52; i++) {
            card[i] = i;  // fill the array in order
        }

        while (cin >> n) {
            //--- Shuffle elements by randomly exchanging each with one other.
            for (int i=0; i<52; i++) {
                int r = rand() % 52;  // generate a random position
                int temp = card[i]; card[i] = card[r]; card[r] = temp;
            }

            //--- Print first n cards as ints.
            for (int c=0; c<n; c++) {
                cout << card[c] << " ";  // Just print number
            }
            cout << endl;
        }

       return 0;
    }