SUBROUTINE SORT(N,RA)
  IMPLICIT none
  INTEGER :: L,N,IR,J,I
  REAL(KIND(0D0)),DIMENSION(N) :: RA
  REAL(KIND(0D0)) :: RRA
  L=N/2+1
  IR=N
10 CONTINUE
  IF(L.GT.1)THEN
     L=L-1
     RRA=RA(L)
  ELSE
     RRA=RA(IR)
     RA(IR)=RA(1)
     IR=IR-1
     IF(IR.EQ.1)THEN
        RA(1)=RRA
        RETURN
     ENDIF
  ENDIF
  I=L
  J=L+L
20 IF(J.LE.IR)THEN
     IF(J.LT.IR)THEN
        IF(RA(J).LT.RA(J+1))J=J+1
     ENDIF
     IF(RRA.LT.RA(J))THEN
        RA(I)=RA(J)
        I=J
        J=J+J
     ELSE
        J=IR+1
     ENDIF
     GO TO 20
  ENDIF
  RA(I)=RRA
  GO TO 10
END SUBROUTINE SORT
