1*> \brief \b DLAORD 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8* Definition: 9* =========== 10* 11* SUBROUTINE DLAORD( JOB, N, X, INCX ) 12* 13* .. Scalar Arguments .. 14* CHARACTER JOB 15* INTEGER INCX, N 16* .. 17* .. Array Arguments .. 18* DOUBLE PRECISION X( * ) 19* .. 20* 21* 22*> \par Purpose: 23* ============= 24*> 25*> \verbatim 26*> 27*> DLAORD sorts the elements of a vector x in increasing or decreasing 28*> order. 29*> \endverbatim 30* 31* Arguments: 32* ========== 33* 34*> \param[in] JOB 35*> \verbatim 36*> JOB is CHARACTER 37*> = 'I': Sort in increasing order 38*> = 'D': Sort in decreasing order 39*> \endverbatim 40*> 41*> \param[in] N 42*> \verbatim 43*> N is INTEGER 44*> The length of the vector X. 45*> \endverbatim 46*> 47*> \param[in,out] X 48*> \verbatim 49*> X is DOUBLE PRECISION array, dimension 50*> (1+(N-1)*INCX) 51*> On entry, the vector of length n to be sorted. 52*> On exit, the vector x is sorted in the prescribed order. 53*> \endverbatim 54*> 55*> \param[in] INCX 56*> \verbatim 57*> INCX is INTEGER 58*> The spacing between successive elements of X. INCX >= 0. 59*> \endverbatim 60* 61* Authors: 62* ======== 63* 64*> \author Univ. of Tennessee 65*> \author Univ. of California Berkeley 66*> \author Univ. of Colorado Denver 67*> \author NAG Ltd. 68* 69*> \date November 2011 70* 71*> \ingroup double_lin 72* 73* ===================================================================== 74 SUBROUTINE DLAORD( JOB, N, X, INCX ) 75* 76* -- LAPACK test routine (version 3.4.0) -- 77* -- LAPACK is a software package provided by Univ. of Tennessee, -- 78* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 79* November 2011 80* 81* .. Scalar Arguments .. 82 CHARACTER JOB 83 INTEGER INCX, N 84* .. 85* .. Array Arguments .. 86 DOUBLE PRECISION X( * ) 87* .. 88* 89* ===================================================================== 90* 91* .. Local Scalars .. 92 INTEGER I, INC, IX, IXNEXT 93 DOUBLE PRECISION TEMP 94* .. 95* .. External Functions .. 96 LOGICAL LSAME 97 EXTERNAL LSAME 98* .. 99* .. Intrinsic Functions .. 100 INTRINSIC ABS 101* .. 102* .. Executable Statements .. 103* 104 INC = ABS( INCX ) 105 IF( LSAME( JOB, 'I' ) ) THEN 106* 107* Sort in increasing order 108* 109 DO 20 I = 2, N 110 IX = 1 + ( I-1 )*INC 111 10 CONTINUE 112 IF( IX.EQ.1 ) 113 $ GO TO 20 114 IXNEXT = IX - INC 115 IF( X( IX ).GT.X( IXNEXT ) ) THEN 116 GO TO 20 117 ELSE 118 TEMP = X( IX ) 119 X( IX ) = X( IXNEXT ) 120 X( IXNEXT ) = TEMP 121 END IF 122 IX = IXNEXT 123 GO TO 10 124 20 CONTINUE 125* 126 ELSE IF( LSAME( JOB, 'D' ) ) THEN 127* 128* Sort in decreasing order 129* 130 DO 40 I = 2, N 131 IX = 1 + ( I-1 )*INC 132 30 CONTINUE 133 IF( IX.EQ.1 ) 134 $ GO TO 40 135 IXNEXT = IX - INC 136 IF( X( IX ).LT.X( IXNEXT ) ) THEN 137 GO TO 40 138 ELSE 139 TEMP = X( IX ) 140 X( IX ) = X( IXNEXT ) 141 X( IXNEXT ) = TEMP 142 END IF 143 IX = IXNEXT 144 GO TO 30 145 40 CONTINUE 146 END IF 147 RETURN 148* 149* End of DLAORD 150* 151 END 152