Anonymous user
Sorting algorithms/Permutation sort: Difference between revisions
m
→{{header|REXX}}: changed/added comments and whitespace, changed indentations.
(Added Elixir) |
m (→{{header|REXX}}: changed/added comments and whitespace, changed indentations.) |
||
Line 1,301:
=={{header|REXX}}==
<lang rexx>/*REXX program sorts and displays an array using the permutation-sort method. */
call gen@ /*generate the array elements. */
call show@
call
call
say; say 'Permutation sort took' ? "permutations to find the sorted list."
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
▲gen@: @. = /*assign default value. */
gen@: @.
@.2
@.3
@.4
@.5
@.6
/* [↓]
do L=1 while @.L\=='';
L=L-1 /*adjust the number of items by one. */
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
inOrder: parse arg q /*see if
_=word(q,1); do j=2 to words(q);
if x<_ then return 0 /*Out of order?
_=x
end /*j*/
do k=1 for #; _=word(#.?,k); @.k=@@._; end /*k
return 1 /*they're all in order finally
/*──────────────────────────────────────────────────────────────────────────────────────*/
permsets: procedure expose !. # #.; parse arg n,#.; #=0▼
/*──────────────────────────────────────────────────────────────────────────────────────*/
▲ do f=1 for n; !.f=f; end /*f*/
call .permAdd /*populate 1st perm*/▼
do k=nm by
if !.k<!.kp then do; i=k; leave; end
return #▼
do j=i+1 while j<n; parse value !.j !.n with !.n !.j; n=n-1; end▼
parse value !.j !.i with !.i !.j
▲ do j=i+1 while j<n; parse value !.j !.n with !.n !.j; n=n-1; end
/*──────────────────────────────────────────────────────────────────────────────────────*/
if i==0 then return 0; do j=i+1 while !.j<!.i; end /*j*/▼
▲ return #
/*──────────────────────────────────────────────────────────────────────────────────────*/
do m=1 for #; _=word(#.? ,m); $=$ @._; end /*m*/
▲ end /*?*/
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
show@: do j=1 for L; say ' element' right(j,length(L)) arg(1)":" @.j
end /*j*/ /* [↑] display array elements*/
return</lang>▼
▲return</lang>
▲'''output''' using the default input:
<pre>
element 1 before sort: ---Four_horsemen_of_the_Apocalypse---
Line 1,363 ⟶ 1,362:
element 5 before sort: Pestilence_[Slaughter]───red_horse
element 6 before sort: Conquest_[War]───white_horse
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
element 1 after sort: ---Four_horsemen_of_the_Apocalypse---
element 2 after sort: =====================================
Line 1,370 ⟶ 1,369:
element 5 after sort: Famine───black_horse
element 6 after sort: Pestilence_[Slaughter]───red_horse
Permutation sort took 21 permutations to find the sorted list.
|