10 ! SORT- SORT THE STUDENT NAMES IN ORDER 20 OPEN "**STINF" AS FILE 3 : DIM# 3 ,S1$( 1111 )=32 30 OPEN "**STUDF" AS FILE 5 : DIM# 5 ,L%( 1111 ,2),S%( 1111 ,10),N( 1111 ) 40 OPEN "**SORT.TMP" AS FILE 11 : DIM# 11 ,R%(27,500),C%(27) 50 OPEN"KB:" AS FILE 12 100 OPEN "**STR.TMP" AS FILE 6 : DIM# 6 ,S$(500)=20 106 DIM T%(500),T1%(500) 110 PRINT"SORT STARTED AT";TIME$(0) 120 OPEN "**MASTER" AS FILE 1 : DIM# 1 ,M%(100) 130 X8%=0% 200 C%(I)=0% FOR I=1 TO 27 210 FOR I%=1% TO M%(2) 220 X=ASCII(S1$(I%))-64 230 IF X<1 OR X>26 THEN X=27 240 C%(X)=C%(X)+1% 250 Y%=C%(X):R%(X,Y%)=I% 260 NEXT I% 270 IF C%(27)=0% GO TO 400 280 PRINT#12,"THERE ARE ";C%(27);"BAD NAMES" 290 PRINT#12,"***************************************" 300 FOR I%=1%TO C%(27) 310 R1%=R%(27,I%):PRINT#12,R1%,S1$(R1%) 320 NEXT I% 330 PRINT #12,TIME$(0) 400 FOR I%=1% TO 26% 405 T6=TIME(1) !START TIME FOR LETTER SORT 410 K%=C%(I%) 415 !*** START LETTER SORT *** 420 FOR J%=1% TO K% 422 T%(J%)=J%:T1%(J%)=R%(I%,J%) 424 P%=T1%(J%):S$(J%)=LEFT(S1$(P%),20) 425 NEXT J% 430 IF K%=0% THEN M%(I%+4%)=M%(I%+3%) :GO TO 700 435 M5=K% !SET UP INITIAL VALUE 440 M5=INT (M5/2) !SHIFT VALUE 450 S9=0 460 FOR Q%=1 TO K%-M5 470 IF S$(T%(Q%))<=S$(T%(Q%+M5)) THEN 500 480 T9%=T%(Q%) : T%(Q%)=T%(Q%+M5) :T%(Q%+M5)=T9% 482 FOR Q1%=Q% TO 1 STEP -M5 484 IF Q1%-M5<1 THEN 500 486 IF S$(T%(Q1%))>=S$(T%(Q1%-M5)) THEN 500 490 T9%=T%(Q1%) : T%(Q1%)=T%(Q1%-M5):T%(Q1%-M5)=T9% 495 NEXT Q1% 500 NEXT Q% 510 IF M5>=2 THEN 440 !GO BACK FOR MORE SORTS 520 T7=(TIME(1)-T6)/10 !CPU TIME FOR LETTER IN SEC 525 PRINT #12,"*********";TIME$(0) 530 PRINT #12,CHR$(I%+64);" TOOK ";T7;" SECONDS FOR ";K%;" NAMES" 590 !CHAIN LETTER THRU THE FILE 600 L%(X8%,1)=T1%(T%(1)) 610 M%(I%+4)=L%(X8%,1) 620 IF I%=1 THEN M%(3)=L%(X8%,1) 640 W%=T1%(T%(1)) 650 FOR J%=2% TO K% 660 L%(W%,1)=T1%(T%(J%)) :W%=T1%(T%(J%)) 670 NEXT J% 680 X8%=W% :PRINT X8%;W%;T%(K%) 700 NEXT I% 710 PRINT"SORT FINISHED AT" ;TIME$(0) 715 J%=L%(0,1) 720 FOR I%=1% TO M%(2) 735 L%(J%,2)=I% 740 J%=L%(J%,1) 750 IF J%=0% THEN 9990 !GO CLOSE FILES AND STOP 760 NEXT I% 9990 CLOSE 1,3,5,12 9992 KILL "SORT.TMP" 9994 KILL "STR.TMP" 9998 PRINT"FINISHED AT",TIME$(0) 9999 END