100 PRINT "6. GENERATE NEW ARRAY TO SORT": PRINT "7. RESET ARRAY SIZE"
110 PRINT "8. TRACK VARIABLES ";: IF TV THEN INVERSE : PRINT " ON ": NORMAL
120 IF NOT TV THEN PRINT "OFF "
130 PRINT "9. QUIT"
140 HTAB 1: VTAB 20: PRINT "YOUR CHOICE (1-9) =-> "; CHR$(8);: GET IP$:IP = VAL(IP$): IF IP <1 OR IP >9 THEN 140
150 REM
160 IF IP = 9 THEN TEXT : HOME : END
170 IF IP = 7 THEN GOSUB 330: GOTO 80
180 IF IP = 6 THEN GOSUB 380: GOTO 80
190 IF IP = 8 AND TV = 1 THEN TV = 0: GOTO 90
200 IF IP = 8 AND TV = 0 THEN TV = 1: GOTO 90
210 REM SORT ARRAY
220 GOSUB 550:C = 0:X = 0: PRINT CHR$(7): ON IP GOSUB 670,760,1030,1150,1310: VTAB 1: PRINT CHR$(7): HOME : POKE 33,40: GOSUB 1720
230 REM SORT DATA PAGE
240 TEXT : HOME : INVERSE :P$ = "-VISISORT-": GOSUB 650:P$ = "SORT DATA": GOSUB 650: NORMAL
250 VTAB 8: PRINT "TYPE OF SORT : ";: IF IP = 1 THEN PRINT "BUBBLE SORT"
260 IF IP = 2 THEN PRINT "BI-BUBBLE SORT"
270 IF IP = 3 THEN PRINT "INTERCHANGE SORT"
280 IF IP = 4 THEN PRINT "SHELL - METZNER SORT"
290 IF IP = 5 THEN PRINT "QUICK SORT"
300 PRINT : PRINT "SIZE OF ARRAY = ";N: PRINT : PRINT "# OF COMPARISONS = ";C: PRINT : PRINT "# OF EXCHANGES = ";X
310 GOSUB 1720: GOTO 80
320 REM CHANGE ARRAY SIZE
330 HOME : PRINT "OLD ARRAY SIZE =";N: PRINT : INPUT "NEW SIZE (5-150) >";IP$
340 IF IP$ = "" THEN 330
350 N1 = VAL(IP$): IF N1 <5 OR N1 >150 THEN 330
360 N = N1: GOTO 500
370 REM STIR UP ARRAY
380 HOME : PRINT "HOW MUCH SHOULD THE ARRAY BE SCRAMBLED": PRINT "USE A NUMBER BETWEEN 0 AND 280."
390 PRINT : PRINT "OR INPUT A W FOR A 'WORST CASE' SORT.": PRINT : PRINT
400 INPUT "(0=NONE, 280=A LOT, W=W.C.) =->";IP$
410 IF IP$ = "" THEN 380
420 IF IP$ = "W" THEN 1630
430 IP = VAL(IP$): IF IP <0 OR IP >280 THEN 380
440 REM SET UP NEW ARRAY
450 HOME : VTAB 21:P$ = "GENERATING ARRAY": GOSUB 650: FOR I = 1 TO N:B%(I) = I: NEXT
460 HGR : GOSUB 1540: FOR I = 1 TO N: HPLOT I +65,N +1 -B%(I): NEXT
470 IF IP = 0 THEN RETURN
480 FOR I = 1 TO IP:T2 = INT( RND(1) *N) +1:T1 = INT( RND(1) *N) +1:T = B%(T1):B%(T1) = B%(T2):B%(T2) = T: HCOLOR= 0: HPLOT T1 +65,0 TO T1 +65,N: HCOLOR= 3: HPLOT T1 +65,N +1 -B%(T1)
490 HCOLOR= 0: HPLOT T2 +65,0 TO T2 +65,N: HCOLOR= 3: HPLOT T2 +65,N +1 -B%(T2): NEXT : FOR I = 1 TO 3000: NEXT : RETURN
500 HOME : VTAB 21:P$ = "GENERATING ARRAY": GOSUB 650: FOR I = 1 TO N:B%(I) = I: NEXT
510 HGR : GOSUB 1540: FOR I = 1 TO N: HPLOT I +65,N +1 -B%(I): NEXT
520 FOR I = 1 TO N:T1 = B%(I):T2 = INT( RND(1) *N) +1:B%(I) = B%(T2):B%(T2) = T1: HCOLOR= 0: HPLOT I +65,0 TO I +65,N: HCOLOR= 3: HPLOT I +65,N +1 -B%(I)
530 HCOLOR= 0: HPLOT T2 +65,0 TO T2 +65,N: HCOLOR= 3: HPLOT T2 +65,N +1 -B%(T2): NEXT : PRINT : PRINT "PRESS RETURN TO CONTINUE";: GET XX$: RETURN
540 REM GET OLD ARRAY
550 HOME : VTAB 21:P$ = "GETTING ARRAY TO SORT": GOSUB 650: FOR I = 1 TO N:A%(I) = B%(I): NEXT
560 HGR : GOSUB 1540: FOR I = 1 TO N: HPLOT I +65,N +1 -A%(I): NEXT
570 HOME : VTAB 22: INVERSE : ON IP GOSUB 590,600,610,620,630: GOSUB 650: POKE 33,10: NORMAL
580 RETURN
590 P$ = " BUBBLE SORT ": RETURN
600 P$ = " BI-BUBBLE SORT ": RETURN
610 P$ = " INTERCHANGE SORT ": RETURN
620 P$ = " SHELL SORT ": RETURN
630 P$ = " QUICK SORT ": RETURN
640 REM CENTER TEXT ON SCREEN
650 HTAB (40 - LEN(P$))/2: PRINT P$: RETURN
660 REM BUBBLE SORT
670 S% = N -1: FOR I = 1 TO S%
680 L = N -I: IF TV THEN GOSUB 1590
690 FOR J = 1 TO L: IF PEEK( -16384) >128 THEN GOSUB 1660
700 C = C +1: IF A%(J) <A%(J +1) THEN 740
710 T = A%(J):A%(J) = A%(J +1):A%(J +1) = T:X = X +1