1       SUBROUTINE SLAORD( JOB, N, X, INCX )
  2 *
  3 *  -- LAPACK auxiliary routine (version 3.1) --
  4 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
  5 *     November 2006
  6 *
  7 *     .. Scalar Arguments ..
  8       CHARACTER          JOB
  9       INTEGER            INCX, N
 10 *     ..
 11 *     .. Array Arguments ..
 12       REAL               X( * )
 13 *     ..
 14 *
 15 *  Purpose
 16 *  =======
 17 *
 18 *  SLAORD sorts the elements of a vector x in increasing or decreasing
 19 *  order.
 20 *
 21 *  Arguments
 22 *  =========
 23 *
 24 *  JOB     (input) CHARACTER
 25 *          = 'I':  Sort in increasing order
 26 *          = 'D':  Sort in decreasing order
 27 *
 28 *  N       (input) INTEGER
 29 *          The length of the vector X.
 30 *
 31 *  X       (input/output) REAL array, dimension
 32 *                         (1+(N-1)*INCX)
 33 *          On entry, the vector of length n to be sorted.
 34 *          On exit, the vector x is sorted in the prescribed order.
 35 *
 36 *  INCX    (input) INTEGER
 37 *          The spacing between successive elements of X.  INCX >= 0.
 38 *
 39 *  =====================================================================
 40 *
 41 *     .. Local Scalars ..
 42       INTEGER            I, INC, IX, IXNEXT
 43       REAL               TEMP
 44 *     ..
 45 *     .. External Functions ..
 46       LOGICAL            LSAME
 47       EXTERNAL           LSAME
 48 *     ..
 49 *     .. Intrinsic Functions ..
 50       INTRINSIC          ABS
 51 *     ..
 52 *     .. Executable Statements ..
 53 *
 54       INC = ABS( INCX )
 55       IF( LSAME( JOB, 'I' ) ) THEN
 56 *
 57 *        Sort in increasing order
 58 *
 59          DO 20 I = 2, N
 60             IX = 1 + ( I-1 )*INC
 61    10       CONTINUE
 62             IF( IX.EQ.1 )
 63      $         GO TO 20
 64             IXNEXT = IX - INC
 65             IF( X( IX ).GT.X( IXNEXT ) ) THEN
 66                GO TO 20
 67             ELSE
 68                TEMP = X( IX )
 69                X( IX ) = X( IXNEXT )
 70                X( IXNEXT ) = TEMP
 71             END IF
 72             IX = IXNEXT
 73             GO TO 10
 74    20    CONTINUE
 75 *
 76       ELSE IF( LSAME( JOB, 'D' ) ) THEN
 77 *
 78 *        Sort in decreasing order
 79 *
 80          DO 40 I = 2, N
 81             IX = 1 + ( I-1 )*INC
 82    30       CONTINUE
 83             IF( IX.EQ.1 )
 84      $         GO TO 40
 85             IXNEXT = IX - INC
 86             IF( X( IX ).LT.X( IXNEXT ) ) THEN
 87                GO TO 40
 88             ELSE
 89                TEMP = X( IX )
 90                X( IX ) = X( IXNEXT )
 91                X( IXNEXT ) = TEMP
 92             END IF
 93             IX = IXNEXT
 94             GO TO 30
 95    40    CONTINUE
 96       END IF
 97       RETURN
 98 *
 99 *     End of SLAORD
100 *
101       END