10 REM "B.SHELL" 20 REM SHELL SORT 30 REM HARD TO UNDERSTAND 40 : 50 MODE7:VDU23;8202;0;0;0; 60 @%=&50506 70 ONERRORREPORT:PRINT" at line ";ERL:END 80 pass%=0 90 size%=20 100 max%=40 110 seed%=1 120 DIMA%(size%) 130 PROCrandomize 140 PROCshell_sort 150 PRINTCHR$(11)+" Sorted." 160 END 170 : 180 DEFPROCrandomize 190 seed%=RND(-seed%) 200 FOR loop%=0 TO size% 210 A%(loop%)=RND(max%) 220 NEXT loop% 230 PROCshowdata 240 ENDPROC 250 : 260 DEFPROCshowdata 270 CLS:PRINT" Shell sort routine."'" Pass number ";pass%; 280 IF pass%=0 THEN PRINT" Initial state." ELSE PRINT 290 FOR loop%=0 TO size% 300 PRINTA%(loop%) 310 NEXT loop% 320 PRINT"ˆ…" 330 REPEAT:A=GET:UNTIL A=32 340 ENDPROC 350 : 360 DEFPROCshell_sort 370 counter%=size% 380 REPEAT 390 pass%=pass%+1 400 counter%=counter% DIV 2 410 FOR loop%=0 TO size%-counter% 420 low%=loop% 430 high%=counter%+loop% 440 REPEAT 450 flag=FALSE 460 IF A%(high%)>A%(low%) THEN swap%=A%(low%):A%(low%)=A%(high%):A%(high%)=swap%:high%=low%:low%=low%-counter%:flag=TRUE 470 UNTIL (flag=FALSE) OR (low%<=0) 480 NEXT loop% 490 PROCshowdata 500 UNTIL counter%<=0 510 ENDPROC