Re: git: 8dcf3a82c54c - main - libc: Implement bsort(3) a bitonic type of sorting algorithm.]
Date: Thu, 20 Apr 2023 11:23:18 UTC
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