Sorting algorithms/Strand sort: Difference between revisions

Content added Content deleted
(Added Elixir)
Line 350: Line 350:
{{out}}
{{out}}
<pre>[-4, -3, -2, -2, -1, 0, 0, 2, 2, 3, 4, 5, 5, 5, 5]</pre>
<pre>[-4, -3, -2, -2, -1, 0, 0, 2, 2, 3, 4, 5, 5, 5, 5]</pre>

=={{header|Elixir}}==
{{trans|Ruby}}
<lang elixir>defmodule Sort do
def strand_sort(args), do: strand_sort(args, [])
defp strand_sort([], result), do: result
defp strand_sort(a, result) do
{_, sublist, b} = Enum.reduce(a, {hd(a),[],[]}, fn val,{v,l1,l2} ->
if v <= val, do: {val, [val | l1], l2},
else: {v, l1, [val | l2]}
end)
strand_sort(b, :lists.merge(Enum.reverse(sublist), result))
end
end

IO.inspect Sort.strand_sort [7, 17, 6, 20, 20, 12, 1, 1, 9]</lang>

{{out}}
<pre>
[1, 1, 6, 7, 9, 12, 17, 20, 20]
</pre>


=={{header|Euphoria}}==
=={{header|Euphoria}}==
Line 652: Line 674:
<pre>StrandSort[{2, 3, 7, 5, 1, 4, 7}]
<pre>StrandSort[{2, 3, 7, 5, 1, 4, 7}]
{1, 2, 3, 4, 5, 7, 7}</pre>
{1, 2, 3, 4, 5, 7, 7}</pre>

=={{header|MAXScript}}==
=={{header|MAXScript}}==
<lang MAXScript>fn strandSort arr =
<lang MAXScript>fn strandSort arr =
Line 992: Line 1,015:
@a = strand_sort(@a);
@a = strand_sort(@a);
say "After @a";</lang>
say "After @a";</lang>

=={{header|Perl 6}}==
=={{header|Perl 6}}==
<lang perl6>sub infix:<M> (@x, @y) {
<lang perl6>sub infix:<M> (@x, @y) {