On 4/20/23 11:20, Joerg Sonnenberger wrote:
Am Wed, Apr 19, 2023 at 11:47:35PM +0200 schrieb Hans Petter Selasky:
On 4/19/23 23:17, Joerg Sonnenberger wrote:
That's false. The difficult part of QuickSort is the median selection.
This can be done in O(n) using the median of median algorithm and when
combined into the main algorithm, much of the work for the median
selection also helps the partition step.

Hi Joerg,

 From what I know, they all fall back to other sorting algorithms using
malloc(), in the end.

Please, just go and read:
   Blum, Floy, Pratt, Rivest, Tarjan: Time Bounds for Selection, 1973.
   [https://people.csail.mit.edu/rivest/pubs/BFPRT73.pdf]

If you want a slightly more variant:
   Alexandrescu: Fast Deterministic Selection, 2017.
   [http://erdani.org/research/sea2017.pdf]

Short answer: QuickSort requires O(log N) extra space, which is
essentially a fixed cost given the natural address space limitations.
Unless operating in a seriously confined environment, that's a perfectly
fine use of the regular stack.

Hi Joerg,

Thanks for the references you've provided. After reading through the paper from 1973, I have the impressions it is about solving the so-called pivot selection problem.

The basic QuickSort idea was introduced in 1961, according to the paper you referred to:

C. A. R. HOaRE, Find (Algorithm 65), Communications of the ACM, July 1961, pp. 321-32

The other paper you refer to:
http://erdani.org/research/sea2017.pdf

is about different ways to implement QuickSort and how to mitigate problems about pivot selection and performance.

Looking around, qsort() in libc's around the globe is so-to-speak equivalent to variants of QuickSort:

Example 1: Android

https://android.googlesource.com/platform/bionic/+/754c178ae551aedcbbfd3bfd1c1c3b710d9ad989/libc/stdlib/qsort.c

Example 2: Linux (GLibc)

https://github.com/lattera/glibc/blob/master/stdlib/qsort.c

Example 3: NetBSD

http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdlib/qsort.c?rev=1.23&content-type=text/x-cvsweb-markup

Example 4: Darwin

https://github.com/apple/darwin-xnu/blob/main/bsd/kern/qsort.c

And FreeBSD of course.

Why not allow for more sorting competition inside FreeBSD?

If libc is not the place, maybe an own library, like libsort is more appropriate?

Would that be any better if bsort(3) was in its own library, and developed from that?

--HPS

Reply via email to