I composed the code with adjustments to the array so it would work in a more standard fashion. Testing it in an online compiler instead of the official school one appeared to work:
IDENTIFICATION DIVISION.
PROGRAM-ID. LAB2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 Three-Arrays.
05 Indiv-Array OCCURS 3 TIMES.
10 Numb-Area OCCURS 20 TIMES.
15 Spec-Num PIC 99.
15 FILLER PIC X.
01 Swap-Occur PIC X VALUE "Y".
01 Sort-Max PIC 99.
01 SLVal PIC 99.
01 Bub-Sort-Hold PIC 99.
01 Bub-Swap-Count PIC 9999.
01 Bub-Comp-Count PIC 9999.
01 Comb-Sort-Hold PIC 99.
01 Comb-Swap-Count PIC 9999.
01 Comb-Comp-Count PIC 9999.
01 Comb-Static-Size PIC 99.
PROCEDURE DIVISION.
100-Main-Routine.
MOVE
"20,19,18,17,16,15,14,13,12,11,10,09,08,07,06,05,04,03,02,01" TO
Indiv-Array(1), Indiv-Array(2), Indiv-Array(3)
DISPLAY "Current Array: " Indiv-Array(1)
DISPLAY " "
PERFORM 200-Top-Bub-Sort-Routine
DISPLAY "Bubble-Sorted Array: " Indiv-Array(2)
DISPLAY "Number of Swaps: " Bub-Swap-Count
". Number of Comparisons: " Bub-Comp-Count "."
DISPLAY " "
PERFORM 500-Top-Comb-Sort-Routine
DISPLAY "Comb-Sorted Array: " Indiv-Array(3)
DISPLAY "Number of Swaps: " Comb-Swap-Count
". Number of Comparisons: " Comb-Comp-Count "."
STOP RUN.
200-Top-Bub-Sort-Routine.
MOVE "Y" TO Swap-Occur
MOVE 19 TO Sort-Max
MOVE 0 TO Bub-Swap-Count
MOVE 0 TO Bub-Comp-Count
PERFORM 300-Main-Bub-Sort-Routine UNTIL Swap-Occur = "N".
300-Main-Bub-Sort-Routine.
MOVE "N" TO Swap-Occur
PERFORM 400-Secondary-Bub-Sort-Routine VARYING SLVal
FROM 1 BY 1 UNTIL SLVal > Sort-Max.
400-Secondary-Bub-Sort-Routine.
IF Spec-Num(2, SLVal) > Spec-Num(2, SLVal + 1)
ADD 1 TO Bub-Swap-Count
MOVE "Y" TO Swap-Occur
MOVE Spec-Num(2, SLVal) TO Bub-Sort-Hold
MOVE Spec-Num(2, SLVal + 1) TO Spec-Num(2, SLVal)
MOVE Bub-Sort-Hold TO Spec-Num(2, SLVal + 1)
END-IF
ADD 1 TO Bub-Comp-Count.
500-Top-Comb-Sort-Routine.
MOVE "Y" TO Swap-Occur
MOVE 19 TO Sort-Max
MOVE 20 TO Comb-Static-Size
MOVE 0 TO Comb-Swap-Count
MOVE 0 TO Comb-Comp-Count
PERFORM 600-Main-Comb-Sort-Routine UNTIL
Sort-Max IS LESS THAN OR EQUAL TO 1
AND Swap-Occur = "N".
600-Main-Comb-Sort-Routine.
COMPUTE Sort-Max = Sort-Max / 1.25
MOVE "N" TO Swap-Occur
PERFORM 700-Secondary-Comb-Sort-Routine VARYING SLVal
FROM 1 BY 1 UNTIL SLVal + Sort-Max > Comb-Static-Size.
700-Secondary-Comb-Sort-Routine.
IF Spec-Num(3, SLVal) > Spec-Num(3, SLVal + Sort-Max)
ADD 1 TO Comb-Swap-Count
MOVE "Y" TO Swap-Occur
MOVE Spec-Num(3, SLVal) TO Comb-Sort-Hold
MOVE Spec-Num(3, SLVal + Sort-Max) TO Spec-Num(3, SLVal)
MOVE Comb-Sort-Hold TO Spec-Num(3, SLVal + Sort-Max)
END-IF
ADD 1 TO Comb-Comp-Count.
There might be some issues with line length, since our compiler doesn't allow it over a certain length to retain compatibility with older COBOL rules, but besides that this should work. I could log into VMWare for my college and use the school compiler from home, but they all understand the system is slow enough without funneling through the internet. I tried it before, and it took maybe 5-10 minutes to load my USB (I can't load files directly off my computer). Then every normal action took 2-3 minutes to run through, even though running the actual actions locally shouldn't be this terrible. Point being, as long as they say I can add those zeros to the array, I'll use this.
Edit: I think I'll make an Initialization paragraph to shorten the Top Sort Routines a little. I could also reduce the length by merging the swap and comparison counts, as well as the hold, but I feel like it'd be better to keep those for reference instead of purging them after displaying.
On second thought, since most of the MOVEs in those areas are specific and I want to keep them for reference, initializing them in a single paragraph probably would make the code more cluttered. As for Sort-Max, adding a paragraph just for that is dumb. Never mind on it. Just keeping for elaboration of keeping those individualized.