103 parameter(
SELECT = 20 )
106 INTEGER DIR, ENDD, I, J, START, STKPNT
107 REAL D1, D2, D3, DMNMX, TMP
110 INTEGER STACK( 2, 32 )
125 IF( lsame( id,
'D' ) )
THEN
127 ELSE IF( lsame( id,
'I' ) )
THEN
132 ELSE IF( n.LT.0 )
THEN
136 CALL xerbla(
'SLASRT', -info )
149 start = stack( 1, stkpnt )
150 endd = stack( 2, stkpnt )
152 IF( endd-start.LE.
SELECT .AND. endd-start.GT.0 )
THEN
160 DO 30 i = start + 1, endd
161 DO 20 j = i, start + 1, -1
162 IF( d( j ).GT.d( j-1 ) )
THEN
176 DO 50 i = start + 1, endd
177 DO 40 j = i, start + 1, -1
178 IF( d( j ).LT.d( j-1 ) )
THEN
190 ELSE IF( endd-start.GT.
SELECT )
THEN
198 i = ( start+endd ) / 2
203 ELSE IF( d3.LT.d2 )
THEN
211 ELSE IF( d3.LT.d1 )
THEN
227 IF( d( j ).LT.dmnmx )
231 IF( d( i ).GT.dmnmx )
239 IF( j-start.GT.endd-j-1 )
THEN
241 stack( 1, stkpnt ) = start
242 stack( 2, stkpnt ) = j
244 stack( 1, stkpnt ) = j + 1
245 stack( 2, stkpnt ) = endd
248 stack( 1, stkpnt ) = j + 1
249 stack( 2, stkpnt ) = endd
251 stack( 1, stkpnt ) = start
252 stack( 2, stkpnt ) = j
263 IF( d( j ).GT.dmnmx )
267 IF( d( i ).LT.dmnmx )
275 IF( j-start.GT.endd-j-1 )
THEN
277 stack( 1, stkpnt ) = start
278 stack( 2, stkpnt ) = j
280 stack( 1, stkpnt ) = j + 1
281 stack( 2, stkpnt ) = endd
284 stack( 1, stkpnt ) = j + 1
285 stack( 2, stkpnt ) = endd
287 stack( 1, stkpnt ) = start
288 stack( 2, stkpnt ) = j
subroutine slasrt(id, n, d, info)
SLASRT sorts numbers in increasing or decreasing order.