qsort() documentation
Hans Petter Selasky
hps at selasky.org
Wed Apr 20 06:41:54 UTC 2016
On 04/20/16 06:01, Warren Block wrote:
> On Tue, 19 Apr 2016, Aleksander Alekseev wrote:
>
>>> Why Wikipedia, specifically? There are a lot of places that describe
>>> quicksort. How about just
>>>
>>> Note: This implementation of qsort() is designed to avoid the
>>> worst-case complexity of N**2 that is often seen with standard
>>> versions.
>>
>> I would say that this statement is just false. Worst-case complexity is
>> still N**2. How about something like:
>>
>> """
>> This implementation of qsort() has worst case complexity of N**2.
>> However measures were taken that make it very unlikely that for some
>> random input N**2 swaps will be made. It's still possible to generate
>> such an input on purpose though. See code below for more details.
>> """
>
> Okay:
>
> The quicksort algorithm worst-case is O(N**2), but this implementation
> has been designed to avoid that for most real data.
Hi,
There is something which I don't understand. Why is quicksort falling
back to insertion sort which is an O(N**2) algorithm, when there exist a
O(log(N)*log(N)*N) algorithms, which I propose as a solution to the
"bad" characteristics of qsort.
The replacement algorithm I propose does not allocate working memory and
it does not recurse and it does not use a significant amount of stack
space. Maybe some number theorists want to have a look? I cannot seem to
find it anywhere public.
See here:
https://reviews.freebsd.org/D5241
Local test results w/D5241 running statically in userspace:
> Data set size log2(N) qsort w/insert sort qsort w/hpsort mergesort data set
> 10 1.28 1.12 1.34 random0
> 11 2.42 2.43 2.83 random0
> 12 5.21 5.2 6.1 random0
>
> 10 1.26 1.14 1.44 random1
> 11 2.46 2.46 3.05 random1
> 12 5.28 5.29 6.56 random1
>
> 10 10.01 5.1 0.2 bad0
> 11 39.12 12.11 0.33 bad0
> 12 156.54 28.42 0.58 bad0
New algorithm is in the middle column. Times are in seconds.
Bad0 data set:
> http://calmerthanyouare.org/2014/06/11/algorithmic-complexity-attacks-and-libc-qsort.html
--HPS
More information about the freebsd-current
mailing list