SUBROUTINE MDIAN1 (X,N,XMED) C C C THIS SUBROUTINE CALCULATES THE MEDIAN VALUE OF AN ARRAY C C C ********** CALLED SUBROUTINES ********** C C C SORT - SORTS AN ARRAY C C C C ********** VARIABLE DECLARATIONS ********** C C INTEGER*4 I INTEGER*4 N ! Number of data points INTEGER*4 N2 ! half the number of data points C REAL*4 XMED ! The median C REAL*4 X(N) ! The input array C C C ********** MAIN BODY OF SUBROUTINE ********** C C CALL SORT (N,X) ! Sort the input array C N2=N/2 C IF(2*N2.EQ.N)THEN ! Is N even or odd? XMED=0.5D+00*(X(N2)+X(N2+1)) ELSE XMED=X(N2+1) ENDIF C RETURN C END C C C ---------------------------------------------------------------------------- C C SUBROUTINE SORT (N,RA) C C C THIS SUBROUTINE SORTS AN ARRAY C C ********** VARIABLE DECLARATIONS ********** C INTEGER*4 I ! Counter INTEGER*4 J ! Counter INTEGER*4 IR ! Counter INTEGER*4 L ! Counter INTEGER*4 N ! Number of elements to be sorted C REAL*4 RRA ! Temporary variable C REAL*4 RA(N) ! Input variable C C C ********** MAIN BODY OF SUBROUTINE ********** C C 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 GOTO 30 ! 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 GOTO 20 ENDIF RA(I)=RRA GOTO 10 C 30 RETURN C END