(Improved) Benchmark for Phobos Sort Algorithm

Craig Black craigblack2 at cox.net
Thu Dec 16 20:10:12 PST 2010


"Matthias Walter" <xammy at xammy.homelinux.net> wrote in message 
news:mailman.1065.1292557052.21107.digitalmars-d at puremagic.com...
> On 12/16/2010 09:36 PM, Craig Black wrote:
>> It was brought to my attention that the quick sort has a very bad
>> worst case, so I implemented a simple fix for it.  Now the worst case
>> (completely ordered) is the best case, and it only slows down the
>> general case by a small percentage.  I thought to myself, "it can't be
>> this easy to fix quick sort".  Does anyone see a flaw in this simple
>> fix?  Performs much better than Phobos in completely random and
>> completely sorted data.  Perhaps there is another case where it
>> doesn't do as well?
>
> Yes, there is a "flaw": There are still instances of arrays where you
> will end up with a pivot element being one of the largest or one of the
> smallest elements in *every* call. The means, that you split your array
> from length n not into two arrays roughly of size n/2 and n/2, but of
> O(1) and n - O(1). This implies a running time of n^2 (in contrast to n
> log n), which is obviously bad.
>
> I don't know how std.algorithm.sort works, but C++ STL uses an
> Introspective sort, which is a quick-sort variant like you have, but it
> has some measurements that observe whether the above worst case occurs
> (e.g. by looking at the recursion depth) and switches to a heap-sort in
> this case. [1]
>
> Matthias
>
> [1] http://en.wikipedia.org/wiki/Introsort

Thanks for the advice!  I have been looking on the internet and it seems 
introsort is the best, but I haven't found any free C/C++ code for it.

-Craig 



More information about the Digitalmars-d mailing list