I know, but as I said, it was a test to see if I could gain any benefit from it first before implementing a full system for such a thing.
Moreover, I think that your design, unfortunately, doesn't accomplish encapsulation of functionality too well. If you really want to implement threading capability, just supply it as a template parameter (ei: ThreadSpawningPolicy or what have you); mixing the "raw" threading code with sorting logic just makes it harder to generalize things, anyway.
I am aware of std::sort, but I was feeling adventurous. Dealing with different sorts on my course, I took the liberty of implementing Quicksort, Heapsort and Mergesort.
Besides, instead of reinventing the wheel, you could have simply used std::sort (courtesy of a specialized iterator). And that doesn't just cover quicksort (which can't be used on linked lists, for example), but whatever is most appropriate for that particular iterator type. ;)