#include <iostream>

using namespace std;


template< typename CARD >

void shuffle( CARD deck[], int card_count )

{

    for( int i = 0; i < card_count; ++i )                // 0 ~ card_count - 1 까지의 수를 배열에 넣음

        deck[ i ] = i;


    while( card_count )

    {

        int select = rand() % card_count--;              // 카드 범위 내에서 하나를 고르고 범위를 1 줄임

        std::swap( deck[ select ], deck[ card_count ] ); // 고른 카드와 범위 하나 밖의 카드를 swap

    }

}


int main()

{

    int cards[54];

    shuffle( cards, sizeof cards / sizeof *cards );

    for( const auto& card : cards )

        cout << card << endl;

    return 0;

}


이건 구조를 설명하기 위한 코드.

실무에서는 STL을 사용할 수 있는경우 shuffle 과 메르센트위스터 랜덤함수를 사용하길 권한다.