Integer sort algorithm using random access iterators. All variants fall back to std::sort if the data is too small.integer_sort is a fast templated in-place hybrid radix/comparison algorithm, which in testing tends to be roughly 50% to 2X faster than std::sort for large tests (>=100kB).
Worst-case performance is  O(N * (lg(range)/s + s)) , so integer_sort is asymptotically faster than pure comparison-based algorithms. s is max_splits, which defaults to 11, so its worst-case with default settings for 32-bit integers is  O(N * ((32/11)  slow radix-based iterations fast comparison-based iterations).
Some performance plots of runtime vs. n and log(range) are provided:
 windows_integer_sort 
 osx_integer_sort
- Template Parameters
- 
  
  
- Parameters
- 
  
    | [in] | first | Iterator pointer to first element. |  | [in] | last | Iterator pointing to one beyond the end of data. |  
 
- Precondition
- [first,last) is a valid range.
- 
RandomAccessItervalue_typeis mutable.
- 
RandomAccessItervalue_typeis LessThanComparable
- 
RandomAccessItervalue_typesupports theoperator>>, which returns an integer-type right-shifted a specified number of bits.
- Postcondition
- The elements in the range [first,last) are sorted in ascending order.
- Returns
- void.
- Exceptions
- 
  
    | Propagates | exceptions if any of the element comparisons, the element swaps (or moves), the right shift, subtraction of right-shifted elements, functors, or any operations on iterators throw. |  
 
- Warning
- Throwing an exception may cause data loss. This will also throw if a small vector resize throws, in which case there will be no data loss. 
- 
Invalid arguments cause undefined behaviour. 
- Note
- spreadsortfunction provides a wrapper that calls the fastest sorting algorithm available for a data type, enabling faster generic-programming.