%BEGIN %STRING(31)%ARRAY NAMES(0:99) %ROUTINESPEC STRINGSORT(%STRINGARRAYNAME X,%INTEGER F,T) %INTEGER I,N READ(N) READSTRING(NAMES(I)) %FOR I=1,1,N STRINGSORT(NAMES,1,N) PRINTSTRING(NAMES(I).TOSTRING(NL)) %FOR I=1,1,N %ROUTINE STRINGSORT(%STRINGARRAYNAME X,%INTEGER FROM,TO) %INTEGER L,U %STRING(255)D %RETURN %IF FROM>=TO; ! NOTHING (LEFT) TO SORT L=FROM; U=TO D=X(U); ! THE PARTITION BOUND %CYCLE L=L+1 %WHILE LX(L) %EXIT %IF L>=U X(U)=X(L); U=U-1 %WHILE LD X(L)=X(U) %REPEAT %UNTIL L>=U X(U)=D L=L-1; U=U+1 STRINGSORT(X,FROM,L) %IF FROMU %END %ENDOFPROGRAM