1 SUBROUTINE DLAORD( 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 DOUBLE PRECISION X( * )
13 * ..
14 *
15 * Purpose
16 * =======
17 *
18 * DLAORD 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) DOUBLE PRECISION 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 DOUBLE PRECISION 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 DLAORD
100 *
101 END
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 DOUBLE PRECISION X( * )
13 * ..
14 *
15 * Purpose
16 * =======
17 *
18 * DLAORD 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) DOUBLE PRECISION 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 DOUBLE PRECISION 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 DLAORD
100 *
101 END