62 lines
2.3 KiB
Plaintext
62 lines
2.3 KiB
Plaintext
* Permutations 26/10/2015
|
|
PERMUTE CSECT
|
|
USING PERMUTE,R15 set base register
|
|
LA R9,TMP-A n=hbound(a)
|
|
SR R10,R10 nn=0
|
|
LOOP LA R10,1(R10) nn=nn+1
|
|
LA R11,PG pgi=@pg
|
|
LA R6,1 i=1
|
|
LOOPI1 CR R6,R9 do i=1 to n
|
|
BH ELOOPI1
|
|
LA R2,A-1(R6) @a(i)
|
|
MVC 0(1,R11),0(R2) output a(i)
|
|
LA R11,1(R11) pgi=pgi+1
|
|
LA R6,1(R6) i=i+1
|
|
B LOOPI1
|
|
ELOOPI1 XPRNT PG,80
|
|
LR R6,R9 i=n
|
|
LOOPUIM BCTR R6,0 i=i-1
|
|
LTR R6,R6 until i=0
|
|
BE ELOOPUIM
|
|
LA R2,A-1(R6) @a(i)
|
|
LA R3,A(R6) @a(i+1)
|
|
CLC 0(1,R2),0(R3) or until a(i)<a(i+1)
|
|
BNL LOOPUIM
|
|
ELOOPUIM LR R7,R6 j=i
|
|
LA R7,1(R7) j=i+1
|
|
LR R8,R9 k=n
|
|
LOOPWJ CR R7,R8 do while j<k
|
|
BNL ELOOPWJ
|
|
LA R2,A-1(R7) r2=@a(j)
|
|
LA R3,A-1(R8) r3=@a(k)
|
|
MVC TMP,0(R2) tmp=a(j)
|
|
MVC 0(1,R2),0(R3) a(j)=a(k)
|
|
MVC 0(1,R3),TMP a(k)=tmp
|
|
LA R7,1(R7) j=j+1
|
|
BCTR R8,0 k=k-1
|
|
B LOOPWJ
|
|
ELOOPWJ LTR R6,R6 if i>0
|
|
BNP ILE0
|
|
LR R7,R6 j=i
|
|
LA R7,1(R7) j=i+1
|
|
LOOPWA LA R2,A-1(R7) @a(j)
|
|
LA R3,A-1(R6) @a(i)
|
|
CLC 0(1,R2),0(R3) do while a(j)<a(i)
|
|
BNL AJGEAI
|
|
LA R7,1(R7) j=j+1
|
|
B LOOPWA
|
|
AJGEAI LA R2,A-1(R7) r2=@a(j)
|
|
LA R3,A-1(R6) r3=@a(i)
|
|
MVC TMP,0(R2) tmp=a(j)
|
|
MVC 0(1,R2),0(R3) a(j)=a(i)
|
|
MVC 0(1,R3),TMP a(i)=tmp
|
|
ILE0 LTR R6,R6 until i<>0
|
|
BNE LOOP
|
|
XR R15,R15 set return code
|
|
BR R14 return to caller
|
|
A DC C'ABCD' <== input
|
|
TMP DS C temp for swap
|
|
PG DC CL80' ' buffer
|
|
YREGS
|
|
END PERMUTE
|