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) { |