[fpc-devel] Sorting tests

Stefan Glienke sglienke at dsharp.org
Tue Nov 29 16:06:56 CET 2022


More like a variation of that: TimSort - but that's rather a beast to 
implement properly and efficient.

Am 29.11.2022 um 14:41 schrieb J. Gareth Moreton via fpc-devel:
>
> Quicksort is not inherently stable because of what happens if a value 
> is equal to the pivot - more specifically, which of the identical 
> values is selected as the pivot - for example, if you try to sort a 
> list of identical values, they will inevitably change order because 
> each stage will move all of the values to one side of the pivot (and 
> also cause quicksort to degenerate into O(n²)).  If you want a stable 
> sort, you need to use things like merge sort instead.
>
> Kit
>
> On 29/11/2022 13:25, Sven Barth via fpc-devel wrote:
>> Ondrej Pokorny via fpc-devel <fpc-devel at lists.freepascal.org> schrieb 
>> am Di., 29. Nov. 2022, 11:39:
>>
>>     Am 29.11.2022 um 11:08 schrieb Sven Barth via fpc-devel:
>>>     J. Gareth Moreton via fpc-devel <fpc-devel at lists.freepascal.org>
>>>     schrieb am Di., 29. Nov. 2022, 10:09:
>>>
>>>         Surely that's a bug in the comparison functions that should
>>>         be fixed and
>>>         not something that can be blamed on introsort.  If a
>>>         comparison function
>>>         is faulty, then pretty nuch any sorting algorithm can be
>>>         considered to
>>>         have unpredictable behaviour.
>>>
>>>
>>>     This *can* be blamed on IntroSort, because Stability (order of
>>>     equal elements is kept) is an attribute of sorting algorithms
>>>     and IntroSort is *not* considered stable while QuickSort *can*
>>>     be stable depending on the implementation and ours *is*.
>>
>>     If for two elements [a, b] the comparison function returns
>>     a<b=true and b<a=true
>>
>>     then the problem is not in stability or any other feature of the
>>     sorting algorithm but in the comparison function indeed. Or am I
>>     missing something?
>>
>>
>> For such a comparison function the issue is indeed in the comparison 
>> function, but Nikolay also mentioned "a<b=false and b<a=false" which 
>> is the case for equal elements.
>>
>> Regards,
>> Sven
>>
>>
>> _______________________________________________
>> fpc-devel maillist  -fpc-devel at lists.freepascal.org
>> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>
> _______________________________________________
> fpc-devel maillist  -fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20221129/00a7ef2a/attachment.htm>


More information about the fpc-devel mailing list