SUBROUTINE DLAORD( JOB, N, X, INCX ) * * -- LAPACK auxiliary routine (version 3.1) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOB INTEGER INCX, N * .. * .. Array Arguments .. DOUBLE PRECISION X( * ) * .. * * Purpose * ======= * * DLAORD sorts the elements of a vector x in increasing or decreasing * order. * * Arguments * ========= * * JOB (input) CHARACTER * = 'I': Sort in increasing order * = 'D': Sort in decreasing order * * N (input) INTEGER * The length of the vector X. * * X (input/output) DOUBLE PRECISION array, dimension * (1+(N-1)*INCX) * On entry, the vector of length n to be sorted. * On exit, the vector x is sorted in the prescribed order. * * INCX (input) INTEGER * The spacing between successive elements of X. INCX >= 0. * * ===================================================================== * * .. Local Scalars .. INTEGER I, INC, IX, IXNEXT DOUBLE PRECISION TEMP * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. Intrinsic Functions .. INTRINSIC ABS * .. * .. Executable Statements .. * INC = ABS( INCX ) IF( LSAME( JOB, 'I' ) ) THEN * * Sort in increasing order * DO 20 I = 2, N IX = 1 + ( I-1 )*INC 10 CONTINUE IF( IX.EQ.1 ) $ GO TO 20 IXNEXT = IX - INC IF( X( IX ).GT.X( IXNEXT ) ) THEN GO TO 20 ELSE TEMP = X( IX ) X( IX ) = X( IXNEXT ) X( IXNEXT ) = TEMP END IF IX = IXNEXT GO TO 10 20 CONTINUE * ELSE IF( LSAME( JOB, 'D' ) ) THEN * * Sort in decreasing order * DO 40 I = 2, N IX = 1 + ( I-1 )*INC 30 CONTINUE IF( IX.EQ.1 ) $ GO TO 40 IXNEXT = IX - INC IF( X( IX ).LT.X( IXNEXT ) ) THEN GO TO 40 ELSE TEMP = X( IX ) X( IX ) = X( IXNEXT ) X( IXNEXT ) = TEMP END IF IX = IXNEXT GO TO 30 40 CONTINUE END IF RETURN * * End of DLAORD * END