Алгоритм тасования карт в карточных играх компании Microsoft. Данный алгоритм написан на языке программирования С++ и реализован в среде программирования Microsoft Visual C++.  
Code
#define BLACK 0 // COLOUR(card)  
 #define RED 1  
 #define ACE 0 // VALUE(card)  
 #define DEUCE 1  
 #define CLUB 0 // SUIT(card)  
 #define DIAMOND 1  
 #define HEART 2  
 #define SPADE 3  
 #define SUIT(card) ((card) % 4)  
 #define VALUE(card) ((card) / 4)  
 #define COLOUR(card) (SUIT(card) == DIAMOND || SUIT(card) ==HEART)  
 #define MAXPOS 21  
 #define MAXCOL 9 // includes top row as column 0  
 CARD card[MAXCOL][MAXPOS]; // current layout of cards, CARDs are  
 ints  
 {  
 int i, j; // generic counters  
 int col, pos;  
 int wLeft = 52; // cards left to be chosen in shuffle  
 CARD deck[52]; // deck of 52 unique cards  
 for (col = 0; col < MAXCOL; col++) // clear the deck  
 for (pos = 0; pos < MAXPOS; pos++)  
 card[col][pos] = EMPTY;  
 /* shuffle cards */  
 for (i = 0; i < 52; i++) // put unique card in each deck loc.  
 deck[i] = i;  
 srand(gamenumber); // gamenumber is seed for rand()  
 for (i = 0; i < 52; i++)  
 {  
 j = rand() % wLeft;  
 card[(i%8)+1][i/8] = deck[j];  
 deck[j] = deck[--wLeft];  
 }  
 }