I have a linked list implementation and I’m experimenting with both MergeSort and QuickSort algorithms.
What I don’t understand is why the sort operation in std::list is so fast.
Looking at the std::list under Linux and it appears to be linked list as well, not an array based list.
The merge sort I tried almost identical to Dave Gamble’s version here:
Merge Sort a Linked List
Also, I thought I’d try a simple quicksort based on this code:
http://www.flipcode.com/archives/Quick_Sort_On_Linked_List.shtml
Surprisingly, to sort 10 million random numbers using std::list and sort was around 10 times quicker than either of those others.
And for those that are asking, yes I need to use my own list class for this project.
I’ve been taking a look at the interesting libstdc++ (GCC) implementation for list::sort (source code) and it doesn’t seem to implement a traditional merge sort algorithm (at least not one I’ve ever seen before).
Basically what it does is:
i=0th) bucket.ith bucket is not empty, merge theith bucket with thei+1th bucket.Small note: merging a bucket
Xwith a bucketYwill remove all the elements from bucketXand add them to bucketYwhile keeping everything sorted. Also note that the number of elements within a bucket is either0or2^i.Now why is this faster then a traditionnal merge sort? Well I can’t say for sure but here are a few things that comes to mind:
mergetrash the cache less frequently.I’m pretty sure the folks who implemented this algorithm tested it thoroughly so if you want a definitive answer you’ll probably have to ask on the GCC mailing list.