C********************************************************************** C SUBROUTINE DHPSRT (N,X,Y,Z) C C Purpose: C This subroutine sorts the array X using HeapSort. It rearranges C the elements of Y and Z at the same time. C C Parameters: C N = the length of the arrays (input). C X = the primary array to be used in sorting (input/output). C Y = another array, sorted in the same order as X (input/output). C Z = another array, sorted in the same order as X (input/output). C C Noel M. Nachtigal C October 4, 1990 C C********************************************************************** C INTEGER N DOUBLE PRECISION X(N), Y(N), Z(N) C C Local variables. C INTEGER I, J, K, L DOUBLE PRECISION TMPX, TMPY, TMPZ C IF (N.LE.1) RETURN C L = N / 2 + 1 K = N 10 IF (L.GT.1) THEN L = L - 1 TMPX = X(L) TMPY = Y(L) TMPZ = Z(L) ELSE TMPX = X(K) TMPY = Y(K) TMPZ = Z(K) X(K) = X(1) Y(K) = Y(1) Z(K) = Z(1) K = K - 1 IF (K.LE.1) THEN X(1) = TMPX Y(1) = TMPY Z(1) = TMPZ RETURN END IF END IF I = L J = L + L 20 IF (J.LE.K) THEN IF (J.LT.K) THEN IF (X(J).GT.X(J+1)) J = J + 1 END IF IF (TMPX.GT.X(J)) THEN X(I) = X(J) Y(I) = Y(J) Z(I) = Z(J) I = J J = J + J ELSE J = K + 1 END IF GO TO 20 END IF X(I) = TMPX Y(I) = TMPY Z(I) = TMPZ GO TO 10 END C C**********************************************************************