Sorting algorithms/Strand sort: Difference between revisions

Content added Content deleted
(→‎{{header|Euphoria}}: Euphoria example added)
No edit summary
Line 324:
[1, 2, 3, 3, 4, 5]
[1, 2, 3, 3, 3, 4, 5, 6]</pre>
 
=={{header|NetRexx}}==
<lang NetRexx>/* NetRexx */
options replace format comments java crossref savelog symbols binary
 
import java.util.List
 
placesList = [String -
"UK London", "US New York", "US Boston", "US Washington" -
, "UK Washington", "US Birmingham", "UK Birmingham", "UK Boston" -
]
 
lists = [ -
placesList -
, strandSort(String[] Arrays.copyOf(placesList, placesList.length)) -
]
 
loop ln = 0 to lists.length - 1
cl = lists[ln]
loop ct = 0 to cl.length - 1
say cl[ct]
end ct
say
end ln
 
return
 
method strandSort(A = String[]) public constant binary returns String[]
 
rl = String[A.length]
al = List strandSort(Arrays.asList(A))
al.toArray(rl)
 
return rl
 
method strandSort(Alst = List) public constant binary returns ArrayList
 
A = ArrayList(Alst)
result = ArrayList()
loop label A_ while A.size > 0
sublist = ArrayList()
sublist.add(A.get(0))
A.remove(0)
loop i_ = 0 while i_ < A.size - 1
if (Comparable A.get(i_)).compareTo(Comparable sublist.get(sublist.size - 1)) > 0 then do
sublist.add(A.get(i_))
A.remove(i_)
end
end i_
result = merge(result, sublist)
end A_
 
return result
 
method merge(left = List, right = List) public constant binary returns ArrayList
 
result = ArrayList()
loop label mx while left.size > 0 & right.size > 0
if (Comparable left.get(0)).compareTo(Comparable right.get(0)) <= 0 then do
result.add(left.get(0))
left.remove(0)
end
else do
result.add(right.get(0))
right.remove(0)
end
end mx
if left.size > 0 then do
result.addAll(left)
end
if right.size > 0 then do
result.addAll(right)
end
 
return result
</lang>
;Output
<pre>
UK London
US New York
US Boston
US Washington
UK Washington
US Birmingham
UK Birmingham
UK Boston
 
UK Birmingham
UK Boston
UK London
UK Washington
US Birmingham
US Boston
US New York
US Washington
</pre>
 
=={{header|PARI/GP}}==