Mergesort всегда возвращается на глубину ⌈log<sub>2</sub>N⌉
.На каждом уровне рекурсии каждый элемент сравнивается один раз.
Быстрая сортировка может достичь этого только в том случае, если каждый раз угадывает оптимальное значение разбиения, что маловероятно.Как правило, одна сторона перегородки будет больше, чем другая сторона.Немного уравновешивая увеличенную глубину рекурсии, можно сказать, что после сортировки раздела его элементы больше не сравниваются.Поэтому некоторые элементы сравниваются больше, а другие меньше.Согласно одному правдоподобному определению «среднего случая», быстрая сортировка, как ожидается, будет делать на 40% больше сравнений, чем слияние.
Но быстрая сортировка имеет большое преимущество для больших наборов данных.В сортировке слиянием шаг объединения не может быть выполнен эффективно на месте.Алгоритм зависит от возможности использовать временное хранилище того же размера, что и исходный набор данных.
Так что mergesort, вероятно, лучше, если у вас достаточно свободного места.По крайней мере, так думали авторы glibc, чья реализация qsort
выполняет сортировку слиянием, если набор данных не очень большой.