[Issue 17039] New: int[2][]'s sort are slow with default comparator
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Wed Dec 28 07:25:11 PST 2016
https://issues.dlang.org/show_bug.cgi?id=17039
Issue ID: 17039
Summary: int[2][]'s sort are slow with default comparator
Product: D
Version: D2
Hardware: x86_64
OS: Mac OS X
Status: NEW
Severity: enhancement
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: moskou.moskou at gmail.com
when I want to sort int[2][], I noticed that if I use my comparator, I can sort
more faster.
------------------------------------------
import std.stdio, std.array, std.datetime, std.random, std.algorithm;
void main() {
//make random array
int[2][] base = new int[2][1000000];
Random gen = Random(unpredictableSeed);
foreach (ref d; base) {
d[0] = uniform(0, 1_000_000_000, gen);
d[1] = uniform(0, 1_000_000_000, gen);
}
//1: simple
auto b = base.dup;
StopWatch sw;
writeln("START");
sw.start;
sort(b);
sw.stop;
writeln("END ", sw.peek.msecs, "ms (type 1)");
sw.reset;
//2: my comparator
auto c = base.dup;
writeln("START");
sw.start;
sort!((l, r){
foreach (i; 0..2) {
if (l[i] != r[i]) return l[i] < r[i];
}
return false;
})(c);
sw.stop;
writeln("END ", sw.peek.msecs, "ms (type 2)");
sw.reset;
assert(equal(b, c));
}
------------------------------------------
This code output
START
END 520ms (type 1)
START
END 330ms (type 2)
with dmd(v2.072.1) -O -release source.d
It seem slower about x1.5, is this a bug?
--
More information about the Digitalmars-d-bugs
mailing list