all tasks
This commit is contained in:
parent
b83f433714
commit
68f8f3e56b
14735 changed files with 178959 additions and 0 deletions
|
|
@ -0,0 +1,49 @@
|
|||
DCL (T(20)) FIXED BIN(31); /* scratch space of length N */
|
||||
|
||||
QUICKSORT: PROCEDURE (A,AMIN,AMAX,N) RECURSIVE ;
|
||||
DECLARE (A(*)) FIXED BIN(31);
|
||||
DECLARE (N,AMIN,AMAX) FIXED BIN(31) NONASGN;
|
||||
DECLARE (I,J,IA,IB,IC,PIV) FIXED BIN(31);
|
||||
DECLARE (P,Q) POINTER;
|
||||
DECLARE (AP(1)) FIXED BIN(31) BASED(P);
|
||||
|
||||
IF(N <= 1)THEN RETURN;
|
||||
IA=0; IB=0; IC=N+1;
|
||||
PIV=(AMIN+AMAX)/2;
|
||||
DO I=1 TO N;
|
||||
IF(A(I) < PIV)THEN DO;
|
||||
IA+=1; A(IA)=A(I);
|
||||
END; ELSE IF(A(I) > PIV) THEN DO;
|
||||
IC-=1; T(IC)=A(I);
|
||||
END; ELSE DO;
|
||||
IB+=1; T(IB)=A(I);
|
||||
END;
|
||||
END;
|
||||
DO I=1 TO IB; A(I+IA)=T(I); END;
|
||||
DO I=IC TO N; A(I)=T(N+IC-I); END;
|
||||
P=ADDR(A(IC));
|
||||
IC=N+1-IC;
|
||||
IF(IA > 1) THEN CALL QUICKSORT(A, AMIN, PIV-1,IA);
|
||||
IF(IC > 1) THEN CALL QUICKSORT(AP,PIV+1,AMAX, IC);
|
||||
RETURN;
|
||||
END QUICKSORT;
|
||||
MINMAX: PROC(A,AMIN,AMAX,N);
|
||||
DCL (AMIN,AMAX) FIXED BIN(31),
|
||||
(N,A(*)) FIXED BIN(31) NONASGN ;
|
||||
DCL (I,X,Y) FIXED BIN(31);
|
||||
|
||||
AMIN=A(N); AMAX=AMIN;
|
||||
DO I=1 TO N-1;
|
||||
X=A(I); Y=A(I+1);
|
||||
IF (X < Y)THEN DO;
|
||||
IF (X < AMIN) THEN AMIN=X;
|
||||
IF (Y > AMAX) THEN AMAX=Y;
|
||||
END; ELSE DO;
|
||||
IF (X > AMAX) THEN AMAX=X;
|
||||
IF (Y < AMIN) THEN AMIN=Y;
|
||||
END;
|
||||
END;
|
||||
RETURN;
|
||||
END MINMAX;
|
||||
CALL MINMAX(A,AMIN,AMAX,N);
|
||||
CALL QUICKSORT(A,AMIN,AMAX,N);
|
||||
Loading…
Add table
Add a link
Reference in a new issue