From cplusplus.com std::sort
complexity is defined:
Complexity
Approximately N*logN comparisons on average (where N is last
GCC uses a variation of Musser’s introsort. This guarantees a worst-case running time of O(n log n):
It begins with quicksort and switches to heapsort when the recursion depth exceeds a level based on … the number of elements being sorted.
The implementation can be found in the stl_algo.h header in the __introsort_loop
function.