Advertisement
Guest User

bubblesort

a guest
Apr 8th, 2020
512
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
COBOL 4.01 KB | None | 0 0
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID.                      BUBBLESORT.
  3.        AUTHOR.                          DAVE STRATFORD.
  4.        DATE-WRITTEN.                    MARCH 2010.
  5.        INSTALLATION.                    HEXAGON SYSTEMS LIMITED.
  6.  
  7.        ENVIRONMENT DIVISION.
  8.        CONFIGURATION SECTION.
  9.        SOURCE-COMPUTER.                 ICL VME.
  10.        OBJECT-COMPUTER.                 ICL VME.
  11.  
  12.        INPUT-OUTPUT SECTION.
  13.        FILE-CONTROL.
  14.            SELECT FA-INPUT-FILE  ASSIGN FL01.
  15.            SELECT FB-OUTPUT-FILE ASSIGN FL02.
  16.  
  17.        DATA DIVISION.
  18.        FILE SECTION.
  19.  
  20.        FD  FA-INPUT-FILE.
  21.        01  FA-INPUT-REC.
  22.          03  FA-DATA                    PIC S9(6).
  23.  
  24.        FD  FB-OUTPUT-FILE.
  25.        01  FB-OUTPUT-REC                PIC S9(6).
  26.  
  27.        WORKING-STORAGE SECTION.
  28.        01  WA-IDENTITY.
  29.          03  WA-PROGNAME                PIC X(10) VALUE "BUBBLESORT".
  30.          03  WA-VERSION                 PIC X(6) VALUE "000001".
  31.  
  32.        01  WB-TABLE.
  33.          03  WB-ENTRY                   PIC 9(8) COMP SYNC OCCURS 100000
  34.                                                   INDEXED BY WB-IX-1.
  35.  
  36.        01  WC-VARS.
  37.          03  WC-SIZE                    PIC S9(8) COMP SYNC.
  38.          03  WC-TEMP                    PIC S9(8) COMP SYNC.
  39.          03  WC-END                     PIC S9(8) COMP SYNC.
  40.          03  WC-LAST-CHANGE             PIC S9(8) COMP SYNC.
  41.  
  42.        01  WF-CONDITION-FLAGS.
  43.          03  WF-EOF-FLAG                PIC X.
  44.            88  END-OF-FILE              VALUE "Y".
  45.          03  WF-EMPTY-FILE-FLAG         PIC X.
  46.            88  EMPTY-FILE               VALUE "Y".
  47.  
  48.        PROCEDURE DIVISION.
  49.        A-MAIN SECTION.
  50.        A-000.
  51.            PERFORM B-INITIALISE.
  52.            IF NOT EMPTY-FILE
  53.               PERFORM C-SORT.
  54.            PERFORM D-FINISH.
  55.  
  56.        A-999.
  57.            STOP RUN.
  58.  
  59.        B-INITIALISE SECTION.
  60.        B-000.
  61.            DISPLAY "*** " WA-PROGNAME " VERSION "
  62.                           WA-VERSION " STARTING ***".
  63.  
  64.            MOVE ALL "N" TO WF-CONDITION-FLAGS.
  65.            OPEN INPUT FA-INPUT-FILE.
  66.            SET WB-IX-1 TO 0.
  67.  
  68.            READ FA-INPUT-FILE AT END MOVE "Y" TO WF-EOF-FLAG
  69.                                                  WF-EMPTY-FILE-FLAG.
  70.  
  71.            PERFORM BA-READ-INPUT UNTIL END-OF-FILE.
  72.  
  73.            CLOSE FA-INPUT-FILE.
  74.  
  75.            SET WC-SIZE TO WB-IX-1.
  76.  
  77.        B-999.
  78.            EXIT.
  79.  
  80.        BA-READ-INPUT SECTION.
  81.        BA-000.
  82.            SET WB-IX-1 UP BY 1.
  83.            MOVE FA-DATA TO WB-ENTRY(WB-IX-1).
  84.  
  85.            READ FA-INPUT-FILE AT END MOVE "Y" TO WF-EOF-FLAG.
  86.  
  87.        BA-999.
  88.            EXIT.
  89.  
  90.        C-SORT SECTION.
  91.        C-000.
  92.            DISPLAY "SORT STARTING".
  93.  
  94.            MOVE WC-SIZE TO WC-END.
  95.            PERFORM E-BUBBLE UNTIL WC-END = 1.
  96.  
  97.            DISPLAY "SORT FINISHED".
  98.  
  99.        C-999.
  100.            EXIT.
  101.  
  102.        D-FINISH SECTION.
  103.        D-000.
  104.            OPEN OUTPUT FB-OUTPUT-FILE.
  105.            SET WB-IX-1 TO 1.
  106.  
  107.            PERFORM DA-WRITE-OUTPUT UNTIL WB-IX-1 > WC-SIZE.
  108.  
  109.            CLOSE FB-OUTPUT-FILE.
  110.  
  111.            DISPLAY "*** " WA-PROGNAME " FINISHED ***".
  112.  
  113.        D-999.
  114.            EXIT.
  115.  
  116.        DA-WRITE-OUTPUT SECTION.
  117.        DA-000.
  118.            WRITE FB-OUTPUT-REC FROM WB-ENTRY(WB-IX-1).
  119.            SET WB-IX-1 UP BY 1.
  120.  
  121.        DA-999.
  122.            EXIT.
  123.  
  124.        E-BUBBLE SECTION.
  125.        E-000.
  126.            MOVE 1 TO WC-LAST-CHANGE.
  127.  
  128.            PERFORM F-PASS VARYING WB-IX-1 FROM 1 BY 1
  129.                           UNTIL WB-IX-1 = WC-END.
  130.  
  131.            MOVE WC-LAST-CHANGE TO WC-END.
  132.  
  133.        E-999.
  134.            EXIT.
  135.  
  136.        F-PASS SECTION.
  137.        F-000.
  138.            IF WB-ENTRY(WB-IX-1) > WB-ENTRY(WB-IX-1 + 1)
  139.               SET  WC-LAST-CHANGE        TO WB-IX-1
  140.               MOVE WB-ENTRY(WB-IX-1)     TO WC-TEMP
  141.               MOVE WB-ENTRY(WB-IX-1 + 1) TO WB-ENTRY(WB-IX-1)
  142.               MOVE WC-TEMP               TO WB-ENTRY(WB-IX-1 + 1).
  143.  
  144.        F-999.
  145.            EXIT.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement