10 MAXVALS=1000:DIM VALUES(MAXVALS) 20 INFILE$="INPUT.TXT" 30 OUTFILE$="OUTPUT.TXT" 40 PRINT "***HEAPSORT GW-BASIC***" 50 GOSUB 2000 60 GOSUB 4000 70 GOSUB 3000 80 PRINT "***RUN COMPLETE***" 90 PRINT "HEAPSORT TOOK"; ELAPSED ; "SECONDS." 999 END 1000 REM ________SIFT_DOWN________ 1010 CHILD = ROOT * 2 + 1 1020 IF CHILD >= HEAPSIZE THEN GOTO 1120 1030 IF CHILD + 1 >= HEAPSIZE THEN GOTO 1060 1040 IF VALUES(CHILD) >= VALUES(CHILD + 1) THEN GOTO 1060 1050 CHILD = CHILD + 1 1060 IF VALUES(ROOT) >= VALUES(CHILD) THEN GOTO 1120 1070 TEMP = VALUES(ROOT) 1080 VALUES(ROOT) = VALUES(CHILD) 1090 VALUES(CHILD) = TEMP 1100 ROOT = CHILD 1110 GOTO 1010 1120 RETURN 1130 REM _________________________ 2000 REM ________LOAD_FILE________ 2010 PRINT "READING INPUT FILE..."; 2020 OPEN INFILE$ FOR INPUT AS #1 2030 IF EOF(1) THEN GOTO 2090 2040 LINE INPUT #1, L$ 2050 IF L$ = "" THEN 2030 2060 VALUES(COUNT) = VAL(L$) 2070 COUNT = COUNT + 1 2080 GOTO 2030 2090 CLOSE #1 2100 PRINT "DONE." 2110 RETURN 2120 REM _________________________ 3000 REM ________SAVE_FILE________ 3010 PRINT "SAVING OUTPUT FILE..."; 3020 OPEN OUTFILE$ FOR OUTPUT AS #1 3030 FOR I = 0 TO COUNT - 1 3040 PRINT #1, VALUES(I) 3050 NEXT I 3060 CLOSE #1 3070 PRINT "DONE." 3080 RETURN 3090 REM _________________________ 4000 REM ______PERFORM_SORT_______ 4010 PRINT "SORTING ELEMENTS..."; 4020 STARTTIME = TIMER 4030 HEAPSIZE = COUNT 4040 START = INT(HEAPSIZE / 2) - 1 4050 IF START < 0 THEN GOTO 4100 4060 ROOT = START 4070 GOSUB 1000 4080 START = START - 1 4090 GOTO 4050 4100 LAST = HEAPSIZE - 1 4110 IF LAST <= 0 THEN GOTO 4200 4120 TEMP = VALUE(0) 4130 VALUES(0) = VALUES(LAST) 4140 VALUES(LAST) = TEMP 4150 HEAPSIZE = LAST 4160 ROOT = 0 4170 GOSUB 1000 4180 LAST = LAST - 1 4190 GOTO 4110 4200 ENDTIME = TIMER 4210 PRINT "DONE." 4220 ELAPSED = ENDTIME - STARTTIME 4230 IF ELAPSED < 0 THEN ELAPSED = ELAPSED + 86400! 4240 RETURN 4250 REM _________________________