Sorting algorithms/Strand sort: Difference between revisions

Small changes in D entry
(Small changes in D entry)
Line 103:
<lang d>import std.stdio, std.range, std.container, std.algorithm;
 
autoDList!T strandSort(T)(DList!T list) {
autostatic DList!T merge(DList!T left, DList!T right) {
DList!T resresult;
while (!left.empty && !right.empty) {
if (left.front <= right.front) {
resresult.insertBack(left.front);
left.removeFront();
} else {
resresult.insertBack(right.front);
right.removeFront();
}
}
resresult.insertBack(left[]);
resresult.insertBack(right[]);
return resresult;
}
 
DList!T result, sorted;
 
while (!list.empty) {
sorted.clear();
Line 128 ⟶ 129:
if (sorted.back <= item) {
sorted.insertBack(item);
list.stableLinearRemove(take(find(list[], .find(item), .take(1));
}
}
result = merge(sorted, result);
}
 
return result;
}
Line 138 ⟶ 140:
void main() {
auto lst = DList!int([-2,0,-2,5,5,3,-1,-3,5,5,0,2,-4,4,2]);
foreach (e; strandSort(lst))
writef("%d ", e);
}</lang>
{{out}}
<pre>-4 -3 -2 -2 -1 -1 0 0 0 2 2 3 4 5 5 5 5 </pre>
 
=={{header|Clojure}}==