Sorting algorithms/Comb sort: Difference between revisions

Content added Content deleted
(+ Haskell)
(Add BBC Basic and Cobol versions of Combsort11)
Line 109: Line 109:
<pre>88,18,31,44,4,0,8,81,14,78,20,76,84,33,73,75,82,5,62,70
<pre>88,18,31,44,4,0,8,81,14,78,20,76,84,33,73,75,82,5,62,70
0,4,5,8,14,18,20,31,33,44,62,70,73,75,76,78,81,82,84,88</pre>
0,4,5,8,14,18,20,31,33,44,62,70,73,75,76,78,81,82,84,88</pre>

=={{header|BBC BASIC}}==
<lang BBC BASIC>DEF PROC_CombSort11(Size%)

gap%=Size%
REPEAT
IF gap% > 1 THEN
gap%=gap% / 1.3
IF gap%=9 OR gap%=10 gap%=11
ENDIF
I% = 1
Finished%=TRUE
REPEAT
IF data%(I%) > data%(I%+gap%) THEN
SWAP data%(I%),data%(I%+gap%)
Finished% = FALSE
ENDIF
I%+=1
UNTIL I%+gap% > Size%
UNTIL gap%=1 AND Finished%

ENDPROC</lang>


=={{header|C}}==
=={{header|C}}==
Line 202: Line 224:
}
}
}</lang>
}</lang>
=={{header|COBOL}}==
This excerpt contains just enough of the procedure division to show the workings. See the example for the bubble sort for a more complete program.
<lang COBOL> C-PROCESS SECTION.
C-000.
DISPLAY "SORT STARTING".

MOVE WC-SIZE TO WC-GAP.

PERFORM E-COMB UNTIL WC-GAP = 1 AND FINISHED.

DISPLAY "SORT FINISHED".

C-999.
EXIT.

E-COMB SECTION.
E-000.
IF WC-GAP > 1
DIVIDE WC-GAP BY 1.3 GIVING WC-GAP
IF WC-GAP = 9 OR 10
MOVE 11 TO WC-GAP.

MOVE 1 TO WC-SUB-1.
MOVE "Y" TO WF-FINISHED.

PERFORM F-SCAN UNTIL WC-SUB-1 + WC-GAP > WC-SIZE.

E-999.
EXIT.

F-SCAN SECTION.
F-000.
ADD WC-SUB-1 WC-GAP GIVING WC-SUB-2.
IF WB-ENTRY(WC-SUB-1) > WB-ENTRY(WC-SUB-2)
MOVE WB-ENTRY(WC-SUB-1) TO WC-TEMP
MOVE WB-ENTRY(WC-SUB-2) TO WB-ENTRY(WC-SUB-1)
MOVE WC-TEMP TO WB-ENTRY(WC-SUB-2)
MOVE "N" TO WF-FINISHED.

ADD 1 TO WC-SUB-1.

F-999.
EXIT.</lang>
=={{header|D}}==
=={{header|D}}==
{{works with|D|2}}<br/>
{{works with|D|2}}<br/>