Sorting algorithms/Strand sort: Difference between revisions

Line 102:
=={{header|D}}==
{{incorrect|D|The output is not a permutation of the input when the input is [-5, -5, 8].}}
<lang d>import std.stdio, std.range, std.container, std.algorithm;
 
void printlist(T)(string s, DList!T list) {
writef(s);
foreach (e; list)
writef("%d ", e);
writeln();
}
 
DList!T strandSort(T)(DList!T list) {
Line 122 ⟶ 128:
}
 
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
list.linearRemove(list[].find(item).take(1));
leftover.insertBack(item);
}
}
result = merge(sorted, result);
list = leftover;
}
 
Line 142 ⟶ 150:
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);
Anonymous user