Процессор теряет время, когда ошибается в предсказании условий. Автор разбора переписал разбиение массива: элементы распределяются относительно опорного значения без условных переходов.
На Apple M1 сортировка 50 млн чисел заняла 1,70 секунды вместо 3,70. После дополнительных оптимизаций вариант показал 0,86 секунды против 1,19 у
std::sort. На Intel Xeon соотношение другое, поэтому результат нужно проверять на своём процессоре.В разборе с кодом на C показаны буфер, защита от неудачного разбиения и обработка малых участков.