2016 Update

This commit is contained in:
Tina Müller 2016-12-05 22:15:40 +01:00
parent 948b86eafa
commit dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions

View file

@ -1,11 +1,16 @@
* quicksort 14/09/2015
* Quicksort 14/09/2015 & 23/06/2016
QUICKSOR CSECT
USING QUICKSOR,R15 set base register
BEGIN MVC A,=F'1' a(1)=1
MVC B,=A((A-T)/4) b(1)=hbound(t)
USING QUICKSOR,R13 base register
B 72(R15) skip savearea
DC 17F'0' savearea
STM R14,R12,12(R13) prolog
ST R13,4(R15) "
ST R15,8(R13) "
LR R13,R15 "
MVC A,=A(1) a(1)=1
MVC B,=A(NN) b(1)=hbound(t)
L R6,=F'1' k=1
WHILEK LTR R6,R6 do while k^=0
BZ EWHILEK
DO WHILE=(LTR,R6,NZ,R6) do while k<>0 ==================
LR R1,R6 k
SLA R1,2 ~
L R10,A-4(R1) l=a(k)
@ -15,7 +20,7 @@ WHILEK LTR R6,R6 do while k^=0
BCTR R6,0 k=k-1
LR R4,R11 m
C R4,=F'2' if m<2
BL WHILEK then iterate
BL ITERATE then iterate
LR R2,R10 l
AR R2,R11 +m
BCTR R2,0 -1
@ -33,74 +38,72 @@ WHILEK LTR R6,R6 do while k^=0
LR R1,R10 l
SLA R1,2 ~
L R3,T-4(R1) r3=t(l)
IF CR R4,R3 if t(x)<t(l)
BNL ELSE
CR R5,R4 if t(y)<t(x)
BNL IFX
LR R7,R4 p=t(x)
L R1,X x
SLA R1,2 ~
ST R3,T-4(R1) t(x)=t(l)
B EIFX
IFX CR R5,R3 if t(y)>t(l)
BNH IFXELIF
LR R7,R3 p=t(l)
B EIFX
IFXELIF LR R7,R5 p=t(y)
L R1,Y y
SLA R1,2 ~
ST R3,T-4(R1) t(y)=t(l)
EIFX B ENDIF
ELSE CR R5,R3 if t(y)<t(l)
BNL IFY
LR R7,R3 p=t(l)
B ENDIF
IFY CR R5,R4 if t(y)>t(x)
BNH IFYELIF
LR R7,R4 p=t(x)
L R1,X x
SLA R1,2 ~
ST R3,T-4(R1) t(x)=t(l)
B ENDIF
IFYELIF LR R7,R5 p=t(y)
L R1,Y y
SLA R1,2 ~
ST R3,T-4(R1) t(y)=t(l)
ENDIF LA R8,1(R10) i=l+1
IF CR,R4,LT,R3 if t(x)<t(l) ---+
IF CR,R5,LT,R4 if t(y)<t(x) |
LR R7,R4 p=t(x) |
L R1,X x |
SLA R1,2 ~ |
ST R3,T-4(R1) t(x)=t(l) |
ELSEIF CR,R5,GT,R3 elseif t(y)>t(l) |
LR R7,R3 p=t(l) |
ELSE , else |
LR R7,R5 p=t(y) |
L R1,Y y |
SLA R1,2 ~ |
ST R3,T-4(R1) t(y)=t(l) |
ENDIF , end if |
ELSE , else |
IF CR,R5,LT,R3 if t(y)<t(l) |
LR R7,R3 p=t(l) |
ELSEIF CR,R5,GT,R4 elseif t(y)>t(x) |
LR R7,R4 p=t(x) |
L R1,X x |
SLA R1,2 ~ |
ST R3,T-4(R1) t(x)=t(l) |
ELSE , else |
LR R7,R5 p=t(y) |
L R1,Y y |
SLA R1,2 ~ |
ST R3,T-4(R1) t(y)=t(l) |
ENDIF , end if |
ENDIF , end if ---+
LA R8,1(R10) i=l+1
L R9,X j=x
FOREVER EQU *
LOOPWI CR R8,R9 i<=j
BH ELOOPWI
LR R1,R8 i
SLA R1,2 ~
L R2,T-4(R1) t(i)
CR R2,R7 t(i)<=p
BH ELOOPWI
LA R8,1(R8) i=i+1
B LOOPWI
ELOOPWI EQU *
LOOPWJ CR R8,R9 i<j
BNL ELOOPWJ
LR R1,R9 j
SLA R1,2 ~
L R2,T-4(R1) t(j)
CR R2,R7 t(j)>=p
BL ELOOPWJ
BCTR R9,0 j=j-1
B LOOPWJ
ELOOPWJ CR R8,R9 if i>=j
BNL EFOREVER then leave segment finished
LR R1,R8 i
SLA R1,2 ~
LA R2,T-4(R1) @t(i)
LR R1,R9 j
SLA R1,2 ~
LA R3,T-4(R1) @t(j)
L R0,0(R2) w=t(i)
MVC 0(4,R2),0(R3) t(i)=t(j) swap t(i),t(j)
ST R0,0(R3) t(j)=w
B FOREVER
EFOREVER LR R9,R8 j=i
FOREVER EQU * do forever --------------------+
LR R1,R8 i |
SLA R1,2 ~ |
LA R2,T-4(R1) @t(i) |
L R0,0(R2) t(i) |
DO WHILE=(CR,R8,LE,R9,AND, while i<=j and ---+ | X
CR,R0,LE,R7) t(i)<=p | |
AH R8,=H'1' i=i+1 | |
AH R2,=H'4' @t(i) | |
L R0,0(R2) t(i) | |
ENDDO , end while ---+ |
LR R1,R9 j |
SLA R1,2 ~ |
LA R2,T-4(R1) @t(j) |
L R0,0(R2) t(j) |
DO WHILE=(CR,R8,LT,R9,AND, while i<j and ---+ | X
CR,R0,GE,R7) t(j)>=p | |
SH R9,=H'1' j=j-1 | |
SH R2,=H'4' @t(j) | |
L R0,0(R2) t(j) | |
ENDDO , end while ---+ |
CR R8,R9 if i>=j |
BNL LEAVE then leave (segment finished) |
LR R1,R8 i |
SLA R1,2 ~ |
LA R2,T-4(R1) @t(i) |
LR R1,R9 j |
SLA R1,2 ~ |
LA R3,T-4(R1) @t(j) |
L R0,0(R2) w=t(i) + |
MVC 0(4,R2),0(R3) t(i)=t(j) |swap t(i),t(j) |
ST R0,0(R3) t(j)=w + |
B FOREVER end do forever ----------------+
LEAVE EQU *
LR R9,R8 j=i
BCTR R9,0 j=i-1
LR R1,R9 j
SLA R1,2 ~
@ -115,47 +118,52 @@ EFOREVER LR R9,R8 j=i
SLA R1,2 ~
LA R4,A-4(R1) r4=@a(k)
LA R5,B-4(R1) r5=@b(k)
C R8,Y if i<=y
BH IFIHY
ST R8,0(R4) a(k)=i
L R2,X x
SR R2,R8 -i
LA R2,1(R2) +1
ST R2,0(R5) b(k)=x-i+1
LA R6,1(R6) k=k+1
ST R10,4(R4) a(k)=l
LR R2,R9 j
SR R2,R10 -l
ST R2,4(R5) b(k)=j-l
B EIFIHY
IFIHY ST R10,4(R4) a(k)=l
LR R2,R9 j
SR R2,R10 -l
ST R2,0(R5) b(k)=j-l
LA R6,1(R6) k=k+1
ST R8,4(R4) a(k)=i
L R2,X x
SR R2,R8 -i
LA R2,1(R2) +1
ST R2,4(R5) b(k)=x-i+1
EIFIHY B WHILEK
EWHILEK LA R3,PG ibuffer
IF C,R8,LE,Y if i<=y ----+
ST R8,0(R4) a(k)=i |
L R2,X x |
SR R2,R8 -i |
LA R2,1(R2) +1 |
ST R2,0(R5) b(k)=x-i+1 |
LA R6,1(R6) k=k+1 |
ST R10,4(R4) a(k)=l |
LR R2,R9 j |
SR R2,R10 -l |
ST R2,4(R5) b(k)=j-l |
ELSE , else |
ST R10,4(R4) a(k)=l |
LR R2,R9 j |
SR R2,R10 -l |
ST R2,0(R5) b(k)=j-l |
LA R6,1(R6) k=k+1 |
ST R8,4(R4) a(k)=i |
L R2,X x |
SR R2,R8 -i |
LA R2,1(R2) +1 |
ST R2,4(R5) b(k)=x-i+1 |
ENDIF , end if ----+
ITERATE EQU *
ENDDO , end while =====================
* *** ********* print sorted table
LA R3,PG ibuffer
LA R4,T @t(i)
LOOPI C R4,=A(A) do i=1 to hbound(t)
BH ELOOPI
L R2,0(R4) t(i)
XDECO R2,XD edit t(i)
MVC 0(4,R3),XD+8 put in buffer
LA R3,4(R3) ibuffer=ibuffer+1
LA R4,4(R4) i=i+1
B LOOPI
ELOOPI XPRNT PG,80 print bufffer
RETURN XR R15,R15 set return code
BR R14 return to caller
DO WHILE=(C,R4,LE,=A(TEND)) do i=1 to hbound(t)
L R2,0(R4) t(i)
XDECO R2,XD edit t(i)
MVC 0(4,R3),XD+8 put in buffer
LA R3,4(R3) ibuffer=ibuffer+1
LA R4,4(R4) i=i+1
ENDDO , end do
XPRNT PG,80 print buffer
L R13,4(0,R13) epilog
LM R14,R12,12(R13) "
XR R15,R15 "
BR R14 exit
T DC F'10',F'9',F'9',F'6',F'7',F'16',F'1',F'16',F'17',F'15'
DC F'1',F'9',F'18',F'16',F'8',F'20',F'18',F'2',F'19',F'8'
A DS ((A-T)/4)F same size as T
B DS ((A-T)/4)F same size as T
TEND DS 0F
NN EQU (TEND-T)/4)
A DS (NN)F same size as T
B DS (NN)F same size as T
X DS F
Y DS F
PG DS CL80