Worst-case performance of quickSort / getPivot

Vladimir Panteleev vladimir at thecybershadow.net
Sun Nov 17 08:09:40 PST 2013


On Sunday, 17 November 2013 at 05:30:24 UTC, Jean Christophe 
wrote:
>> You mean, sort!`a.foo < b.foo` ?
>
> Yes.
>
> An indirect sorting, assuming a and b to be ojects of class 
> SomePotentialyLargeClass.
>
> Because the array to sort contains pointers only, all the data 
> movement is essentially the same as if we were sorting integer.

If the range elements are reference types, that's what will 
happen (unless they overload opAssign oslt). Otherwise, there's 
makeIndex (already mentioned by Andrei), or you could also do it 
by hand:

1. r.length.iota.array.sort!((a, b) => r[a]<r[b]);
2. r.length.iota.map!(a => &r[a]).array.sort!((a, b) => *a<*b);

r.map!`&a` doesn't work though, because we don't get a reference 
to the range element in the predicate.


More information about the Digitalmars-d mailing list