Here are some timings:
sorted reverse half random
QuicksortInteger(1000000): 0.05787 0.06269 not done 0.16328
QuickSortPlusInteger(15)(1000000): 0.04744 0.04995 0.24928 0.14548
TimSortInteger(1000000): 0.00214 0.00252 0.00981 0.16411
QuicksortString(1000000): 1.36692 1.00144 not done 1.16640
QuickSortPlusString(15)(1000000): 1.38534 0.99298 0.81605 1.23809
TimSortString(1000000): 0.06285 0.09036 0.16268 1.86726
Sorting 1 million integers or strings respectively.
The strings are simply generated with IntToStr for numbers 0 to 999,999 and compared with CompareStr. This means that Sorted, Reverse and half for strings is not really correct, because '10' < '2' etc. I need to fix that, but this is not too bad a dataset for sorting tests either. (I just googled and found that apparently there are some test datasets for sorting algorithm performance. I'll have a look into that.)
The numbers are the time in seconds for a single run on my computer.
As you can see, TimSort is faster than all of them with the exception of random data, where it is still in the same ballpark.
The test program is in the subdirectory Tests\SortingTests.
Please note that with the exception of TimSort, these sorting algoritmms are not implemented for best performance but for convenience: They are abstracted from the data and use callbacks to compare and swap items. TimSort currently works directly on the data and uses a callback only for comparison, but my goal is to abstract the algorithm from the data in a similar manner, if possible.