QBasic / QB64 Discussion Forum      Other Subforums, Links and Downloads
 Return to Index  

Variation

September 15 2008 at 9:18 AM
MONTREALER  (no login)


Response to Notes on the modified shuffle sort:

This Variation brings all the selections to the beginning of the array, so the logic is more straightforward. The body of the program only executes if the number of picks is lower or equal to the selection range, and will only display the numbers not selected if fewer than the range were indeed picked.

==============================================================================

CLS
RANDOMIZE TIMER

range = 40 'entire range
picks = 10 'number of selections

DIM picks AS INTEGER, range AS INTEGER, first AS INTEGER
DIM index AS INTEGER, x AS INTEGER
DIM numbers(range) AS INTEGER

IF picks <= range THEN 'proceed only when we are picking fewer
'or equal times to what the range allows
FOR x = 1 TO range 'assign sequential values to array
numbers(x) = x
NEXT x

PRINT "Partial Shuffle Sort:"
PRINT
FOR x = 1 TO picks 'only shuffles up to the number of selections
index = INT(RND * (range)) + x 'random index up to diminished range
PRINT TAB(10); numbers(index), "goes to position:"; x
SWAP numbers(index), numbers(x) 'swaps value with beginning of diminished range
range = range - 1
NEXT x

PRINT : PRINT "Numbers selected, in sequence:"
FOR x = 1 TO picks
PRINT numbers(x);
NEXT x

IF picks < 40 THEN

PRINT : PRINT
PRINT "Numbers not selected:"
FOR x = picks + 1 TO range
PRINT numbers(x);
NEXT x

END IF
END IF

SYSTEM

 
 Respond to this message