SUBROUTINE SORT( N, X, LIST ) C C Find the sequence list(i), i=1,n such that C x(list(i)), i=1,n is a sorted, increasing sequence. C IMPLICIT UNDEFINED (A-Z) SAVE REAL *4 X(*) INTEGER *4 N, I, J, LIST(*) LOGICAL UNSORTED C C Treat bad input data C IF ( N .LE. 1 ) RETURN C DO I = 1, N LIST(I) = I END DO UNSORTED = .TRUE. DO WHILE ( UNSORTED ) UNSORTED = .FALSE. DO J = 1, N-1 IF ( X(LIST(J)) .GT. X(LIST(J+1)) ) THEN I = LIST(J) LIST(J) = LIST(J+1) LIST(J+1) = I UNSORTED = .TRUE. END IF END DO END DO RETURN END SUBROUTINE SEQUENCE ( N, LIST, X, DUMMY ) C C Sort the array, X(i), by the sequence LIST(i). That is replace C X(i) with X(LIST(i)). Dummy(*) is an array at least as long as X. C IMPLICIT UNDEFINED ( A-Z ) SAVE INTEGER *4 N, LIST(*), I REAL *4 X(*), DUMMY(*) DO I = 1, N DUMMY(I) = X(I) END DO DO I = 1, N X(I) = DUMMY(LIST(I)) END DO RETURN END SUBROUTINE BUBBLE( N, W, X, Y, Z ) C C Sort the data in w and carry along the values for x, y, and z C IMPLICIT UNDEFINED (A-Z) SAVE INTEGER *4 CNT PARAMETER ( CNT = 500 ) REAL *4 W(*), X(*), Y(*), Z(*), TEMP(CNT) INTEGER *4 I, N, LIST(CNT) C C Treat bad input data C IF ( N .LE. 1 ) THEN RETURN ELSE IF ( N .GT. CNT ) THEN WRITE(6,*) ' Too many array elements to sort. ' WRITE(6,*) ' Recompile SORT and re-run the program. ' STOP END IF C CALL SORT ( N, W, LIST ) CALL SEQUENCE ( N, LIST, W, TEMP ) CALL SEQUENCE ( N, LIST, X, TEMP ) CALL SEQUENCE ( N, LIST, Y, TEMP ) CALL SEQUENCE ( N, LIST, Z, TEMP ) RETURN END