Sorting algorithms/Bubble sort: Difference between revisions
Content added Content deleted
PatGarrett (talk | contribs) (→{{header|PL/I}}: correct colour template) |
|||
Line 627: | Line 627: | ||
=={{header|COBOL}}== |
=={{header|COBOL}}== |
||
This is a complete program that |
This is a complete program that demonstrates the bubble sort algorithm in COBOL. |
||
<lang cobol> |
<lang cobol> |
||
identification division. |
|||
PROGRAM-ID. BUBBLESORT. |
|||
program-id. BUBBLSRT. |
|||
AUTHOR. DAVE STRATFORD. |
|||
data division. |
|||
DATE-WRITTEN. MARCH 2010. |
|||
working-storage section. |
|||
INSTALLATION. HEXAGON SYSTEMS LIMITED. |
|||
01 changed-flag pic x. |
|||
88 hasChanged value 'Y'. |
|||
88 hasNOTChanged value 'N'. |
|||
01 itemCount pic 99. |
|||
01 tempItem pic 99. |
|||
01 itemArray. |
|||
03 itemArrayCount pic 99. |
|||
03 item pic 99 occurs 99 times |
|||
indexed by itemIndex. |
|||
* |
|||
procedure division. |
|||
main. |
|||
* place the values to sort into itemArray |
|||
move 10 to itemArrayCount |
|||
move 28 to item (1) |
|||
move 44 to item (2) |
|||
move 46 to item (3) |
|||
move 24 to item (4) |
|||
move 19 to item (5) |
|||
move 2 to item (6) |
|||
move 17 to item (7) |
|||
move 11 to item (8) |
|||
move 24 to item (9) |
|||
move 4 to item (10) |
|||
* store the starting count in itemCount and perform the sort |
|||
move itemArrayCount to itemCount |
|||
perform bubble-sort |
|||
* output the results |
|||
perform varying itemIndex from 1 by 1 |
|||
until itemIndex > itemArrayCount |
|||
display item (itemIndex) ';' with no advancing |
|||
end-perform |
|||
* thats it! |
|||
stop run. |
|||
* |
|||
bubble-sort. |
|||
perform with test after until hasNOTchanged |
|||
set hasNOTChanged to true |
|||
subtract 1 from itemCount |
|||
perform varying itemIndex from 1 by 1 |
|||
until itemIndex > itemCount |
|||
if item (itemIndex) > item (itemIndex + 1) |
|||
move item (itemIndex) to tempItem |
|||
move item (itemIndex + 1) to item (itemIndex) |
|||
move tempItem to item (itemIndex + 1) |
|||
set hasChanged to true |
|||
end-if |
|||
end-perform |
|||
end-perform |
|||
. |
|||
</lang> |
|||
Output: 02;04;11;17;19;24;24;28;44;46; |
|||
ENVIRONMENT DIVISION. |
|||
CONFIGURATION SECTION. |
|||
SOURCE-COMPUTER. ICL VME. |
|||
OBJECT-COMPUTER. ICL VME. |
|||
INPUT-OUTPUT SECTION. |
|||
FILE-CONTROL. |
|||
SELECT FA-INPUT-FILE ASSIGN FL01. |
|||
SELECT FB-OUTPUT-FILE ASSIGN FL02. |
|||
DATA DIVISION. |
|||
FILE SECTION. |
|||
FD FA-INPUT-FILE. |
|||
01 FA-INPUT-REC. |
|||
03 FA-DATA PIC S9(6). |
|||
FD FB-OUTPUT-FILE. |
|||
01 FB-OUTPUT-REC PIC S9(6). |
|||
WORKING-STORAGE SECTION. |
|||
01 WA-IDENTITY. |
|||
03 WA-PROGNAME PIC X(10) VALUE "BUBBLESORT". |
|||
03 WA-VERSION PIC X(6) VALUE "000001". |
|||
01 WB-TABLE. |
|||
03 WB-ENTRY PIC 9(8) COMP SYNC OCCURS 100000 |
|||
INDEXED BY WB-IX-1. |
|||
01 WC-VARS. |
|||
03 WC-SIZE PIC S9(8) COMP SYNC. |
|||
03 WC-TEMP PIC S9(8) COMP SYNC. |
|||
03 WC-END PIC S9(8) COMP SYNC. |
|||
03 WC-LAST-CHANGE PIC S9(8) COMP SYNC. |
|||
01 WF-CONDITION-FLAGS. |
|||
03 WF-EOF-FLAG PIC X. |
|||
88 END-OF-FILE VALUE "Y". |
|||
03 WF-EMPTY-FILE-FLAG PIC X. |
|||
88 EMPTY-FILE VALUE "Y". |
|||
PROCEDURE DIVISION. |
|||
A-MAIN SECTION. |
|||
A-000. |
|||
PERFORM B-INITIALISE. |
|||
IF NOT EMPTY-FILE |
|||
PERFORM C-SORT. |
|||
PERFORM D-FINISH. |
|||
A-999. |
|||
STOP RUN. |
|||
B-INITIALISE SECTION. |
|||
B-000. |
|||
DISPLAY "*** " WA-PROGNAME " VERSION " |
|||
WA-VERSION " STARTING ***". |
|||
MOVE ALL "N" TO WF-CONDITION-FLAGS. |
|||
OPEN INPUT FA-INPUT-FILE. |
|||
SET WB-IX-1 TO 0. |
|||
READ FA-INPUT-FILE AT END MOVE "Y" TO WF-EOF-FLAG |
|||
WF-EMPTY-FILE-FLAG. |
|||
PERFORM BA-READ-INPUT UNTIL END-OF-FILE. |
|||
CLOSE FA-INPUT-FILE. |
|||
SET WC-SIZE TO WB-IX-1. |
|||
B-999. |
|||
EXIT. |
|||
BA-READ-INPUT SECTION. |
|||
BA-000. |
|||
SET WB-IX-1 UP BY 1. |
|||
MOVE FA-DATA TO WB-ENTRY(WB-IX-1). |
|||
READ FA-INPUT-FILE AT END MOVE "Y" TO WF-EOF-FLAG. |
|||
BA-999. |
|||
EXIT. |
|||
C-SORT SECTION. |
|||
C-000. |
|||
DISPLAY "SORT STARTING". |
|||
MOVE WC-SIZE TO WC-END. |
|||
PERFORM E-BUBBLE UNTIL WC-END = 1. |
|||
DISPLAY "SORT FINISHED". |
|||
C-999. |
|||
EXIT. |
|||
D-FINISH SECTION. |
|||
D-000. |
|||
OPEN OUTPUT FB-OUTPUT-FILE. |
|||
SET WB-IX-1 TO 1. |
|||
PERFORM DA-WRITE-OUTPUT UNTIL WB-IX-1 > WC-SIZE. |
|||
CLOSE FB-OUTPUT-FILE. |
|||
DISPLAY "*** " WA-PROGNAME " FINISHED ***". |
|||
D-999. |
|||
EXIT. |
|||
DA-WRITE-OUTPUT SECTION. |
|||
DA-000. |
|||
WRITE FB-OUTPUT-REC FROM WB-ENTRY(WB-IX-1). |
|||
SET WB-IX-1 UP BY 1. |
|||
DA-999. |
|||
EXIT. |
|||
E-BUBBLE SECTION. |
|||
E-000. |
|||
MOVE 1 TO WC-LAST-CHANGE. |
|||
PERFORM F-PASS VARYING WB-IX-1 FROM 1 BY 1 |
|||
UNTIL WB-IX-1 = WC-END. |
|||
MOVE WC-LAST-CHANGE TO WC-END. |
|||
E-999. |
|||
EXIT. |
|||
F-PASS SECTION. |
|||
F-000. |
|||
IF WB-ENTRY(WB-IX-1) > WB-ENTRY(WB-IX-1 + 1) |
|||
SET WC-LAST-CHANGE TO WB-IX-1 |
|||
MOVE WB-ENTRY(WB-IX-1) TO WC-TEMP |
|||
MOVE WB-ENTRY(WB-IX-1 + 1) TO WB-ENTRY(WB-IX-1) |
|||
MOVE WC-TEMP TO WB-ENTRY(WB-IX-1 + 1). |
|||
F-999. |
|||
EXIT.</lang> |
|||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |