Sorting algorithms/Strand sort: Difference between revisions

Content added Content deleted
(→‎{{header|D}}: -debug stuff)
m (Sort Clojure < CMake < Common Lisp < D.)
Line 76: Line 76:
}</lang>outout<lang>before sort: -2 0 -2 5 5 3 -1 -3 5 5 0 2 -4 4 2
}</lang>outout<lang>before sort: -2 0 -2 5 5 3 -1 -3 5 5 0 2 -4 4 2
after sort: -4 -3 -2 -2 -1 0 0 2 2 3 4 5 5 5 5</lang>
after sort: -4 -3 -2 -2 -1 0 0 2 2 3 4 5 5 5 5</lang>

=={{header|C++}}==
=={{header|C++}}==
<lang cpp>#include <list>
<lang cpp>#include <list>
Line 99: Line 100:
return result;
return result;
}</lang>
}</lang>

=={{header|D}}==
<lang d>import std.stdio, std.range, std.container, std.algorithm;

DList!T strandSort(T)(DList!T list) {
static DList!T merge(DList!T left, DList!T right) {
DList!T result;
while (!left.empty && !right.empty) {
if (left.front <= right.front) {
result.insertBack(left.front);
left.removeFront();
} else {
result.insertBack(right.front);
right.removeFront();
}
}
result.insertBack(left[]);
result.insertBack(right[]);
return result;
}

DList!T result, sorted, leftover;

while (!list.empty) {
leftover.clear();
sorted.clear();
sorted.insertBack(list.front);
list.removeFront();
foreach (item; list) {
if (sorted.back <= item)
sorted.insertBack(item);
else
leftover.insertBack(item);
}
result = merge(sorted, result);
list = leftover;
}

return result;
}

void main() {
auto lst = DList!int([-2,0,-2,5,5,3,-1,-3,5,5,0,2,-4,4,2]);
//auto lst = DList!int([-2,-2, 1]);
foreach (e; strandSort(lst))
writef("%d ", e);
}</lang>
{{out}}
<pre>-4 -3 -2 -2 -1 0 0 2 2 3 4 5 5 5 5 </pre>


=={{header|Clojure}}==
=={{header|Clojure}}==
Line 269: Line 220:
(print (strand-sort r #'<)))</lang>output<lang>(5 8 6 0 6 8 4 7 0 7 1 5 3 3 6)
(print (strand-sort r #'<)))</lang>output<lang>(5 8 6 0 6 8 4 7 0 7 1 5 3 3 6)
(0 0 1 3 3 4 5 5 6 6 6 7 7 8 8)</lang>
(0 0 1 3 3 4 5 5 6 6 6 7 7 8 8)</lang>

=={{header|D}}==
<lang d>import std.stdio, std.range, std.container, std.algorithm;

DList!T strandSort(T)(DList!T list) {
static DList!T merge(DList!T left, DList!T right) {
DList!T result;
while (!left.empty && !right.empty) {
if (left.front <= right.front) {
result.insertBack(left.front);
left.removeFront();
} else {
result.insertBack(right.front);
right.removeFront();
}
}
result.insertBack(left[]);
result.insertBack(right[]);
return result;
}

DList!T result, sorted, leftover;

while (!list.empty) {
leftover.clear();
sorted.clear();
sorted.insertBack(list.front);
list.removeFront();
foreach (item; list) {
if (sorted.back <= item)
sorted.insertBack(item);
else
leftover.insertBack(item);
}
result = merge(sorted, result);
list = leftover;
}

return result;
}

void main() {
auto lst = DList!int([-2,0,-2,5,5,3,-1,-3,5,5,0,2,-4,4,2]);
//auto lst = DList!int([-2,-2, 1]);
foreach (e; strandSort(lst))
writef("%d ", e);
}</lang>
{{out}}
<pre>-4 -3 -2 -2 -1 0 0 2 2 3 4 5 5 5 5 </pre>


=={{header|Euphoria}}==
=={{header|Euphoria}}==