Sync
This commit is contained in:
parent
6f050a029e
commit
776bba907c
3887 changed files with 59894 additions and 7280 deletions
|
|
@ -0,0 +1,44 @@
|
|||
import std.stdio, std.container;
|
||||
|
||||
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]);
|
||||
foreach (e; strandSort(lst))
|
||||
write(e, " ");
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
import std.stdio, std.array;
|
||||
|
||||
T[] strandSort(T)(/*in*/ T[] list) pure nothrow {
|
||||
static T[] merge(T[] left, T[] right) pure nothrow {
|
||||
T[] res;
|
||||
while (!left.empty && !right.empty) {
|
||||
if (left.front <= right.front) {
|
||||
res ~= left.front;
|
||||
left.popFront;
|
||||
} else {
|
||||
res ~= right.front;
|
||||
right.popFront;
|
||||
}
|
||||
}
|
||||
return res ~ left ~ right;
|
||||
}
|
||||
|
||||
T[] result;
|
||||
while (!list.empty) {
|
||||
auto sorted = list[0 .. 1];
|
||||
list.popFront;
|
||||
T[] leftover;
|
||||
foreach (item; list)
|
||||
(sorted.back <= item ? sorted : leftover) ~= item;
|
||||
result = merge(sorted, result);
|
||||
list = leftover;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void main() {
|
||||
auto arr = [-2,0,-2,5,5,3,-1,-3,5,5,0,2,-4,4,2];
|
||||
arr.strandSort.writeln;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue