Sorting algorithm
Xinok
xinok at live.com
Fri Oct 7 20:39:08 PDT 2011
On 10/7/2011 2:27 PM, Ellery Newcomer wrote:
> tinkered with timsort a bit a few months ago. comparing that to your
> sort, I get numbers like
>
> xinokSort
> random: 77 ascending: 0 descending: 21
>
> timsort
> random: 354 ascending: 1 descending: 4
>
>
> where each are sorting a 500k element array of int, times are msecs,
> compilation flags were -O -inline -release, sources are
>
> http://personal.utulsa.edu/~ellery-newcomer/timsort.d
> http://personal.utulsa.edu/~ellery-newcomer/xinokSort.d
>
>
> Nice job, Xinok.
>
> anyone want to try to optimize my timsort? :)
The benchmark for descending is no surprise since timsort explicitly
searches for runs in descending order. However, the random benchmark
isn't what I expected. My sort is a bit slower than a standard merge
sort, so I would expect Timsort to be faster.
While part of the reason may be your code is unoptimized, it may also be
the fault of a bug. I ran some more benchmarks and I found a few cases
where your code failed, specifically when the data is mostly random.
Just a guess, but your code may have a problem when the "runs" are too
small.
I also found a case when std.algorithm.sort performs poorly, under Small
Shuffle + Descending.
Numbers represent time taken; Smaller numbers are faster
An MD5 hash is generated for each sort, to verify it was sorted correctly
phoboSort is unstable std.algorithm.sort
Ascending
Is length: 16777216
xinokSort: 50722 C8B8D3A2B4D9882ABCFC31721EF27145
shellSort: 726046 C8B8D3A2B4D9882ABCFC31721EF27145
quickSort: 943475 C8B8D3A2B4D9882ABCFC31721EF27145
mergeSort: 1778944 C8B8D3A2B4D9882ABCFC31721EF27145
radixSort: 3082901 C8B8D3A2B4D9882ABCFC31721EF27145
phoboSort: 955285 C8B8D3A2B4D9882ABCFC31721EF27145
tim Sort: 89201 C8B8D3A2B4D9882ABCFC31721EF27145
Descending
Is length: 16777216
xinokSort: 1916452 C8B8D3A2B4D9882ABCFC31721EF27145
shellSort: 2238446 C8B8D3A2B4D9882ABCFC31721EF27145
quickSort: 1581095 C8B8D3A2B4D9882ABCFC31721EF27145
mergeSort: 3390033 C8B8D3A2B4D9882ABCFC31721EF27145
radixSort: 3067271 C8B8D3A2B4D9882ABCFC31721EF27145
phoboSort: 1035827 C8B8D3A2B4D9882ABCFC31721EF27145
tim Sort: 240896 C8B8D3A2B4D9882ABCFC31721EF27145
Complete Shuffle
Is length: 16777216
xinokSort: 7607511 C8B8D3A2B4D9882ABCFC31721EF27145
shellSort: 8814887 C8B8D3A2B4D9882ABCFC31721EF27145
quickSort: 5623837 C8B8D3A2B4D9882ABCFC31721EF27145
mergeSort: 6704733 C8B8D3A2B4D9882ABCFC31721EF27145
radixSort: 2825567 C8B8D3A2B4D9882ABCFC31721EF27145
phoboSort: 5532275 C8B8D3A2B4D9882ABCFC31721EF27145
tim Sort: 29142913 E03C4778321F69D8AD10F624E6093599
Small Shuffle (1024 pairs were picked at random and swapped)
Is length: 16777216
xinokSort: 589882 C8B8D3A2B4D9882ABCFC31721EF27145
shellSort: 3651222 C8B8D3A2B4D9882ABCFC31721EF27145
quickSort: 2655391 C8B8D3A2B4D9882ABCFC31721EF27145
mergeSort: 2162840 C8B8D3A2B4D9882ABCFC31721EF27145
radixSort: 2988630 C8B8D3A2B4D9882ABCFC31721EF27145
phoboSort: 963103 C8B8D3A2B4D9882ABCFC31721EF27145
tim Sort: 6523251 C8B8D3A2B4D9882ABCFC31721EF27145
Large Shuffle (1,048,576 pairs were picked at random and swapped)
Is length: 16777216
xinokSort: 1956126 C8B8D3A2B4D9882ABCFC31721EF27145
shellSort: 7617207 C8B8D3A2B4D9882ABCFC31721EF27145
quickSort: 3089674 C8B8D3A2B4D9882ABCFC31721EF27145
mergeSort: 2606200 C8B8D3A2B4D9882ABCFC31721EF27145
radixSort: 2932306 C8B8D3A2B4D9882ABCFC31721EF27145
phoboSort: 1619484 C8B8D3A2B4D9882ABCFC31721EF27145
tim Sort: 14883251 DE54E94D1A058459FEA3A80096FCBB18
Small Shuffle + Descending
Is length: 16777216
xinokSort: 2288869 C8B8D3A2B4D9882ABCFC31721EF27145
shellSort: 4599417 C8B8D3A2B4D9882ABCFC31721EF27145
quickSort: 2604222 C8B8D3A2B4D9882ABCFC31721EF27145
mergeSort: 3457241 C8B8D3A2B4D9882ABCFC31721EF27145
radixSort: 3055080 C8B8D3A2B4D9882ABCFC31721EF27145
phoboSort: 261768564 C8B8D3A2B4D9882ABCFC31721EF27145
tim Sort: 10149160 C8B8D3A2B4D9882ABCFC31721EF27145
Large Shuffle + Descending
xinokSort: 2923813 C8B8D3A2B4D9882ABCFC31721EF27145
shellSort: 7678966 C8B8D3A2B4D9882ABCFC31721EF27145
quickSort: 3833138 C8B8D3A2B4D9882ABCFC31721EF27145
mergeSort: 3971124 C8B8D3A2B4D9882ABCFC31721EF27145
radixSort: 2941206 C8B8D3A2B4D9882ABCFC31721EF27145
phoboSort: 3749512 C8B8D3A2B4D9882ABCFC31721EF27145
tim Sort: 22709918 191BD30B3D0E52C922A7E6A16E5E63A5
More information about the Digitalmars-d
mailing list