Atari
Fast Shuffle
James E Korenthal
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.