Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
|
|
@ -0,0 +1,92 @@
|
|||
PROGRAM MERGESORT_DEMO
|
||||
|
||||
! Example of merge sort usage.
|
||||
|
||||
CONST SIZE%=100,S1%=50
|
||||
|
||||
DIM DTA%[SIZE%],FH%[S1%],STACK%[20,2]
|
||||
|
||||
|
||||
PROCEDURE MERGE(START%,MIDDLE%,ENDS%)
|
||||
|
||||
LOCAL FHSIZE%
|
||||
|
||||
FHSIZE%=MIDDLE%-START%+1
|
||||
|
||||
FOR I%=0 TO FHSIZE%-1 DO
|
||||
FH%[I%]=DTA%[START%+I%]
|
||||
END FOR
|
||||
|
||||
I%=0
|
||||
J%=MIDDLE%+1
|
||||
K%=START%
|
||||
|
||||
REPEAT
|
||||
IF FH%[I%]<=DTA%[J%] THEN
|
||||
DTA%[K%]=FH%[I%]
|
||||
I%=I%+1
|
||||
K%=K%+1
|
||||
ELSE
|
||||
DTA%[K%]=DTA%[J%]
|
||||
J%=J%+1
|
||||
K%=K%+1
|
||||
END IF
|
||||
UNTIL I%=FHSIZE% OR J%>ENDS%
|
||||
|
||||
WHILE I%<FHSIZE% DO
|
||||
DTA%[K%]=FH%[I%]
|
||||
I%=I%+1
|
||||
K%=K%+1
|
||||
END WHILE
|
||||
|
||||
END PROCEDURE
|
||||
|
||||
PROCEDURE MERGE_SORT(LEV->LEV)
|
||||
|
||||
! *****************************************************************
|
||||
! This procedure Merge Sorts the chunk of DTA% bounded by
|
||||
! Start% & Ends%.
|
||||
! *****************************************************************
|
||||
|
||||
LOCAL MIDDLE%
|
||||
|
||||
IF ENDS%=START% THEN LEV=LEV-1 EXIT PROCEDURE END IF
|
||||
|
||||
IF ENDS%-START%=1 THEN
|
||||
IF DTA%[ENDS%]<DTA%[START%] THEN
|
||||
SWAP(DTA%[START%],DTA%[ENDS%])
|
||||
END IF
|
||||
LEV=LEV-1
|
||||
EXIT PROCEDURE
|
||||
END IF
|
||||
|
||||
MIDDLE%=START%+(ENDS%-START%)/2
|
||||
|
||||
STACK%[LEV,0]=START% STACK%[LEV,1]=ENDS% STACK%[LEV,2]=MIDDLE%
|
||||
START%=START% ENDS%=MIDDLE%
|
||||
MERGE_SORT(LEV+1->LEV)
|
||||
START%=STACK%[LEV,0] ENDS%=STACK%[LEV,1] MIDDLE%=STACK%[LEV,2]
|
||||
|
||||
STACK%[LEV,0]=START% STACK%[LEV,1]=ENDS% STACK%[LEV,2]=MIDDLE%
|
||||
START%=MIDDLE%+1 ENDS%=ENDS%
|
||||
MERGE_SORT(LEV+1->LEV)
|
||||
START%=STACK%[LEV,0] ENDS%=STACK%[LEV,1] MIDDLE%=STACK%[LEV,2]
|
||||
|
||||
MERGE(START%,MIDDLE%,ENDS%)
|
||||
|
||||
LEV=LEV-1
|
||||
END PROCEDURE
|
||||
|
||||
BEGIN
|
||||
FOR I%=1 TO SIZE% DO
|
||||
DTA%[I%]=RND(1)*10000
|
||||
END FOR
|
||||
|
||||
START%=1 ENDS%=SIZE%
|
||||
MERGE_SORT(0->LEV)
|
||||
|
||||
FOR I%=1 TO SIZE% DO
|
||||
WRITE("#####";DTA%[I%];)
|
||||
END FOR
|
||||
PRINT
|
||||
END PROGRAM
|
||||
Loading…
Add table
Add a link
Reference in a new issue