Sorting algorithms/Cocktail sort: Difference between revisions

→‎version handles non-blanks: De-obfuscate Rexx version
(→‎version handles blanks: De-obfuscate Rexx version)
(→‎version handles non-blanks: De-obfuscate Rexx version)
Line 3,787:
===version handles non-blanks===
This faster REXX version can handle array elements that don't contain blanks or spaces by using a simpler ''swap'' mechanism.
<syntaxhighlight lang="rexx">cocktailSort2: procedure expose items.
<syntaxhighlight lang="rexx">/*──────────────────────────────────────────────────────────────────────────────────────*/
cocktailSort2: procedure expose @.; parsenn arg= N;items.0 nn=n- 1 /*N: the number of items in @items.*/
do until done
do until done; done= 1 /*array items can't have blanks*/
done = 1 do j=1 for nn; jp= j+1
do j = 1 for nn
if @.j>@.jp then parse value 0 @.j @.jp with done @.jp @.j
jp = j + 1 /* endRexx doesn't allow /*"items.(j+1)", so use this instead. */
if items.j > if doneitems.jp then leave /*Did swaps? Then we're done.*/,
parse value 0 items.j items.jp with done items.jp items.j /* swap items.j and items.jp, and set done to 0 */
do k=nn for nn by -1; kp= k+1
end /*j*/
if @.k>@.kp then parse value 0 @.k @.kp with done @.kp @.k
if done then leave end /*kDid swaps? Then we're done.*/
do k = nn for nn by end /*until*/-1
kp = k + 1 /* Rexx doesn't allow "items.(k+1)", so use this instead. */
return</syntaxhighlight> <br><br>
if items.k > items.kp then ,
parse value 0 items.k items.kp with done items.kp items.k /* swap items.k and items.kp, and set done to 0 */
end /*k*/
end /*until*/
 
return</syntaxhighlight> <br><br>
 
=={{header|Ring}}==