40 lines
830 B
Plaintext
40 lines
830 B
Plaintext
SUB perms (n)
|
|
DIM p((n + 1) * 4)
|
|
FOR i = 1 TO n
|
|
p(i) = -i
|
|
NEXT i
|
|
s = 1
|
|
|
|
DO
|
|
PRINT "Perm: (";
|
|
FOR i = 1 TO n
|
|
PRINT ABS(p(i)); "";
|
|
NEXT i
|
|
PRINT ") Sign: "; s
|
|
|
|
k = 0
|
|
FOR i = 2 TO n
|
|
IF p(i) < 0 AND (ABS(p(i)) > ABS(p(i - 1))) AND (ABS(p(i)) > ABS(p(k))) THEN k = i
|
|
NEXT i
|
|
FOR i = 1 TO n - 1
|
|
IF p(i) > 0 AND (ABS(p(i)) > ABS(p(i + 1))) AND (ABS(p(i)) > ABS(p(k))) THEN k = i
|
|
NEXT i
|
|
IF k THEN
|
|
FOR i = 1 TO n 'reverse elements > k
|
|
IF ABS(p(i)) > ABS(p(k)) THEN p(i) = -p(i)
|
|
NEXT i
|
|
'if p(k) < 0 then i = k-1 else i = k+1
|
|
i = k + SGN(p(k))
|
|
SWAP p(k), p(i)
|
|
'temp = p(k)
|
|
'p(k) = p(i)
|
|
'p(i) = temp
|
|
s = -s
|
|
END IF
|
|
LOOP UNTIL k = 0
|
|
END SUB
|
|
|
|
perms (3)
|
|
PRINT
|
|
perms (4)
|