begin
constant string (1) SNL = "
"
string(31)array NAMES(1:99)
routine spec STRINGSORT(string(*)array name X,
integer F, T)
integer I, N
READ(N) until 1 <= N <= 99; ! Reject if not in range.
READSTRING(NAMES(I)) for I=1,1,N
STRINGSORT(NAMES,1,N)
PRINTSTRING(NAMES(I).SNL) for I=1,1,N
routine STRINGSORT(string(*)array name X,
integer FROM, TO)
integer L, U
string(255) D
return if FROM >= TO
L = FROM; U = TO
D = X(U)
cycle
L = L+1 while L < U and X(L) <= D
exit if L = U
X(U) = X(L)
U = U-1 while U > L and X(U) >= D
exit if U = L
X(L) = X(U)
repeat
! Now L = U.
X(U) = D
L = L-1; U = U+1
STRINGSORT(X,FROM,L) if FROM < L
STRINGSORT(X,U,TO) if U < TO
end
end of program