Sorting algorithms/Cocktail sort: Difference between revisions

m
→‎{{header|Wren}}: Changed to Wren S/H
(→‎version handles blanks: De-obfuscate Rexx version)
m (→‎{{header|Wren}}: Changed to Wren S/H)
(3 intermediate revisions by 2 users not shown)
Line 1,742:
 
=={{header|Elena}}==
ELENA 56.0x :
<syntaxhighlight lang="elena">import extensions;
import system'math;
Line 1,758:
swapped := false;
for(int i := 0,; i <= list.Length - 2,; i += 1)
{
if (list[i]>list[i+1])
Line 1,772:
swapped := false;
for(int i := list.Length - 2,; i >= 0,; i -= 1)
{
if (list[i]>list[i+1])
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.
The REXX ''PARSE'' instruction separates an input into parts and assigns them to
<syntaxhighlight lang="rexx">/*──────────────────────────────────────────────────────────────────────────────────────*/
variables, in a single operation. Thus
cocktailSort2: procedure expose @.; parse arg N; nn=n-1 /*N: the number of items in @.*/
<syntaxhighlight lang="rexx">PARSE VALUE 0 items.j items.jp WITH done items.jp items.j</syntaxhighlight>
do until done; done= 1 /*array items can't have blanks*/
sets ''done'' to 0, ''items.jp'' to ''items.j'', and ''items.j'' to ''items.jp'', as long as none of the input
do j=1 for nn; jp= j+1
variables contain any blanks.
if @.j>@.jp then parse value 0 @.j @.jp with done @.jp @.j
<syntaxhighlight lang="rexx">cocktailSort2: procedure expose items.
end /*j*/
cocktailSort2: procedure expose @.; parsenn arg= N;items.0 nn=n- 1 /*N: the number of items in @items.*/
if done then leave /*Did swaps? Then we're done.*/
do until done
do k=nn for nn by -1; kp= k+1
done = 1 if @.k>@.kp then parse value 0 @.k @.kp with done @.kp @.k
do j = 1 for end /*k*/nn
jp = j + 1 end /* Rexx doesn't allow "items.(j+1)", so use this instead. /*until*/
if items.j return</syntaxhighlight> <br><br>items.jp then ,
parse value 0 items.j items.jp with done items.jp items.j /* swap items.j and items.jp, and set done to 0 */
end /*j*/
if done then leave /*Did swaps? Then we're done.*/
do k = nn for nn by -1; kp= k+1
kp = k + 1 /* Rexx doesn't allow "items.(k+1)", so use this instead. */
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}}==
Line 4,441 ⟶ 4,452:
=={{header|Wren}}==
{{trans|Go}}
<syntaxhighlight lang="ecmascriptwren">var cocktailSort = Fn.new { |a|
var last = a.count - 1
while (true) {
9,476

edits