In practice, they have the same, optimal, algorithmic complexity (n log n) but sort() is often several times faster than qsort() on equivalent data due to inlining. For example, default sort() on a container of integers will be compiled to use std::less<int>::operator(), which will be inlined and the internals of std::sort() will be comparing the integers directly. On the other hand, qsort() will be making an indirect call through a function pointer for every comparison. Sometimes compilers can optimize through that, but it's nowhere as common.