Trailing-Edge
-
PDP-10 Archives
-
decuslib20-05
-
decus/20-0141/daswap.for
There are 2 other files named daswap.for in the archive. Click here to see a list.
SUBROUTINE DASWAP(IARRAY,LOW,MID,MAX)
C
C DONALD BARTH, CHEMISTRY DEPT., HARVARD UNIVERSITY
C
C ROUTINE TO SWAP ADJACENT SECTIONS OF SINGLE ARRAY
C
C IARRAY = ARRAY CONTAINING SECTIONS TO BE SWAPPED
C LOW = SUBSCRIPT OF LOWEST LOCATION IN LOW SECTION
C MID = SUBSCRIPT OF HIGHEST LOCATION IN LOW SECTION
C MAX = SUBSCRIPT OF HIGHEST LOCATION IN HIGH
C SECTION
C
C SWAP IS PERFORMED BY MOVING VALUES DIRECTLY TO
C LOCATIONS THEY ARE TO OCCUPY IN THE RESULT.
C
C FOR EXAMPLE, TO SWAP ABCD AND 123 IN THE
C FOLLOWING EXAMPLE, 3 IS MOVED TO LOCATION HOLDING C
C WHICH IS MOVED TO LOCATION HOLDING 2 AND SO ON.
C
C A B C D 1 2 3
C . . I-----------I
C . . I--------I .
C . I-----------I .
C . I--------I . .
C I-----------I . .
C I--------I . . .
C . . . I--------I
C
C IARRAY ARRAY AND NEW AND KEEP VARIABLES SHOULD BE
C MADE FLOATING POINT TO SWAP A FLOATING POINT ARRAY.
C
DIMENSION IARRAY(MAX)
IF(LOW.GT.MID)GO TO 5
IF(MID.GE.MAX)GO TO 5
KOUNT=LOW-MAX-1
LAST=MAX
LONGLO=LOW-MID-1
LONGHI=MAX-MID
1 INDEX=LAST+LONGLO
KEEP=IARRAY(LAST)
2 KOUNT=KOUNT+1
NEW=IARRAY(INDEX)
IARRAY(INDEX)=KEEP
KEEP=NEW
IF(INDEX.GT.MID)GO TO 3
INDEX=INDEX+LONGHI
GO TO 2
3 IF(INDEX.EQ.LAST)GO TO 4
INDEX=INDEX+LONGLO
GO TO 2
4 IF(KOUNT.EQ.0)GO TO 5
LAST=LAST-1
GO TO 1
5 RETURN
C107401072377
END