COMPUTE! ISSUE 37 / JUNE 1983 / PAGE 223
Atari
Fast Shuffle
James E Korenthal
What's all this fuss about rearranging a few numbers? I've seen so many
articles in various magazines about shuffling numbers in increasingly
exotic ways that I'm thoroughly mixed up.
Here's the technique that I've been using for years.
It's simple and fast, and it gives you an equal probability of any
given permutation showing up. The program is written in Atari BASIC,
but will work on, or can easily be converted to, any other BASIC. It's
set up to shuffle 52 cards, represented as numbers from 0-51 in an
array called DECK (with subscripts running from 0-51).
10 REM INITIALIZE
20 N=51:DIM DECK(N):REM SHUFFLE
N+1 N
UMBERS
30 FOR J=0 TO N:DECK(J)=J:NEXT
J:REM
FILL THE DECK
40 REM SHUFFLE THE DECK
50 FOR J=N TO 1 STEP -1:REM LOOP
BACK
WARDS THROUGH DECK
60 K=INT(RND(0)*(J+1)):REM PICK
POSIT
ION TO SWAP
70
TEMP=DECK(J):DECK(J)=DECK(K):DECK(
K)=TEMP
80 NEXT J:REM AND THAT'S ALL
THERE IS
TO IT!
90 FOR J=0 TO N:PRINT DECK(J);"
";:NE
XT J
You can easily set up the shuffling loop as a
one-line subroutine, and then use a GOSUB when it's time to shuffle.
Also, as long as you haven't changed the numbers in the array to be
shuffled, you don't have to reinitialize (line 30 in the program)
before shuffling.