10 IF PAGE<>&1200 THEN PAGE=&1200:CHAIN"B.COMPARE" 20 REM SORT COMP BY H.S.W. 1991 30 MODE7:@%=&00000405 40 ONERRORREPORT:PRINT" at line ";ERL:END 50 max%=1000 60 PRINT'" How many numbers are to be sorted"'" between 2 and 10 ":REPEAT:INPUT nos%:UNTIL (nos%>1) AND (nos%<11) 70 PRINT" Array size 2^";nos%;" = ";2^nos% 80 DIM times%(3,nos%,3) 90 DIM A%(2^nos%) 100 FOR loop%= 1 TO 3:FOR loopy%= 1 TO nos%: times%(loop%,loopy%,1)=99999999 :NEXT loopy%:NEXT loop% 110 PRINT'" How many different groups of data"'" are to be sorted between"'" 1 and 10":REPEAT:INPUTcompare%:UNTIL (compare%>0) AND (compare%<11) 120 MODE0:VDU23;8202;0;0;0;:PRINTTAB(0,1);" Current sort type :" 130 PRINTTAB(0,2);" Current sort size :" 140 PRINTTAB(15,4);"Array size" 150 PRINTTAB(0,6);"Sort type" 160 FOR loop%=1 TO 3:PRINTTAB(7,loop%*4+4);"min":PRINTTAB(7,loop%*4+5);"av.":PRINTTAB(7,loop%*4+6);"max":NEXT loop% 170 PRINTTAB(0,9);"Bubble":PRINTTAB(0,13);"Select":PRINTTAB(0,17);"Shell" 180 FOR seed%=1 TO compare% 190 FOR loopy%=2 TO nos% 200 PRINTTAB(loopy%*7,6);2^loopy% 210 size%=2^loopy% 220 PRINTTAB(21,2);" ":PRINTTAB(21,2);size% 230 sort%=1:PRINTTAB(21,1);"Bubble ":PROCbubble_sort 240 sort%=2:PRINTTAB(21,1);"Selection":PROCselection_sort 250 sort%=3:PRINTTAB(21,1);"Shell ":PROCshell_sort 260 NEXT loopy%:NEXT seed% 270 PRINTCHR$(0,20);"Finished." 280 END 290 : 300 DEFPROCrandomize 310 s=RND(-seed%) 320 FOR loop%=0 TO size% 330 A%(loop%)=RND(max%) 340 NEXT loop% 350 time%=TIME 360 ENDPROC 370 : 380 DEFPROCbubble_sort 390 PROCrandomize 400 REPEAT 410 flag=FALSE 420 FOR loop%=0 TO size%-1 430 IF A%(loop%)A%(low%) THEN swap%=A%(low%):A%(low%)=A%(high%):A%(high%)=swap%:high%=low%:low%=low%-counter%:flag=TRUE 740 UNTIL (flag=FALSE) OR (low%<=0) 750 NEXT loop% 760 UNTIL counter%<=0 770 PROCtiming 780 ENDPROC 790 : 800 DEFPROCtiming 810 time%=TIME-time% 820 IF time% < times%(sort%,loopy%,1) THEN times%(sort%,loopy%,1) = time% 830 PRINTTAB(loopy%*7,sort%*4+4);times%(sort%,loopy%,1)/100 840 IF time% > times%(sort%,loopy%,3) THEN times%(sort%,loopy%,3) = time% 850 PRINTTAB(loopy%*7,sort%*4+6);times%(sort%,loopy%,3)/100 860 IF times%(sort%,loopy%,2)=0 THEN times%(sort%,loopy%,2)=time% ELSE times%(sort%,loopy%,2)=(times%(sort%,loopy%,2)+time%)/2 870 PRINTTAB(loopy%*7,sort%*4+5);times%(sort%,loopy%,2)/100 880 ENDPROC