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

