Sorting algorithms/Permutation sort: Difference between revisions
Content added Content deleted
m (→{{header|Sidef}}: code simplifications) |
(Added Elixir) |
||
Line 41: | Line 41: | ||
return permutations([],array); |
return permutations([],array); |
||
}</lang> |
}</lang> |
||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |
||
ahk forum: [http://www.autohotkey.com/forum/post-276680.html#276680 discussion] |
ahk forum: [http://www.autohotkey.com/forum/post-276680.html#276680 discussion] |
||
Line 493: | Line 494: | ||
→ (0 1 2 3 4 5) |
→ (0 1 2 3 4 5) |
||
</lang> |
</lang> |
||
=={{header|Elixir}}== |
|||
<lang elixir>defmodule Sort do |
|||
def permutation_sort([]), do: [] |
|||
def permutation_sort(list) do |
|||
Enum.find(permutation(list), fn [h|t] -> in_order?(t, h) end) |
|||
end |
|||
defp permutation([]), do: [[]] |
|||
defp permutation(list) do |
|||
for x <- list, y <- permutation(list -- [x]), do: [x|y] |
|||
end |
|||
defp in_order?([], _), do: true |
|||
defp in_order?([h|_], pre) when h<pre, do: false |
|||
defp in_order?([h|t], _), do: in_order?(t, h) |
|||
end |
|||
IO.inspect list = for _ <- 1..9, do: :rand.uniform(20) |
|||
IO.inspect Sort.permutation_sort(list)</lang> |
|||
{{out}} |
|||
<pre> |
|||
[18, 2, 19, 10, 17, 10, 14, 8, 3] |
|||
[2, 3, 8, 10, 10, 14, 17, 18, 19] |
|||
</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |
||
Line 907: | Line 934: | ||
1 2 3 4 5 6</lang> |
1 2 3 4 5 6</lang> |
||
=={{header|MAXScript}}== |
=={{header|MAXScript}}== |
||
<lang MAXScript>fn inOrder arr = |
<lang MAXScript>fn inOrder arr = |
||
Line 1,173: | Line 1,201: | ||
permutation([],[]). |
permutation([],[]). |
||
permutation([X|XS],YS) :- permutation(XS,ZS), select(X,YS,ZS).</lang> |
permutation([X|XS],YS) :- permutation(XS,ZS), select(X,YS,ZS).</lang> |
||
=={{header|PureBasic}}== |
=={{header|PureBasic}}== |
||
<lang PureBasic>Macro reverse(firstIndex, lastIndex) |
<lang PureBasic>Macro reverse(firstIndex, lastIndex) |