C     THIS SUBROUTINE IS THE MAIN SUBROUTINE OF A GROUP WHICH WILL SORT
C     A SERIES OF NUMBERS INTO ASCENDING ORDER.  THIS SUBROUTINE CALLS
C     PART AND PERMUT TO ACCOMPLISH THIS.
C
      SUBROUTINE SORT (A,N)
      DIMENSION A(N)
      IF (N.LE.1) RETURN
      IF (N.GT.20) GO TO 10
      IU=N
      CALL PERMUT (A,N,1,IU)
      RETURN
   10 AMAX=A(1)
      AMIN=A(1)
      DO 20 I=2,N
      IF (A(I).LT.AMIN) AMIN=A(I)
      IF (A(I).GT.AMAX) AMAX=A(I)
   20 CONTINUE
      IF (AMIN.EQ.AMAX) RETURN
      Q=SQRT(FLOAT(N))
      D=(AMAX-AMIN)/Q
      K=Q
      CUT=AMIN+D
      IU=0
   30 CALL PART (A,N,CUT,IL,IU)
      IF (IL.LT.IU) CALL PERMUT (A,N,IL,IU)
      IF (IU.GE.(N-1)) RETURN
      CUT=CUT+D
      IF ((N-IU).GT.K) GO TO 30
      IL=IU+1
      IU=N
      CALL PERMUT (A,N,IL,IU)
      RETURN
      END
