Для мене має сенс, що це дозволяє швидше вирішити проблему, якщо обидві половинки займають менше половини роботи над вирішенням всього набору даних.
Це не суть алгоритмів розділення та перемоги. Зазвичай справа в тому, що алгоритми взагалі "не можуть мати справу з усім набором даних". Натомість вона поділяється на частини, які є тривіальними для вирішення (як сортування двох чисел), потім вони вирішуються тривіально, а результати рекомбінуються таким чином, що дає рішення для повного набору даних.
Але чому б не розділити набір даних на три частини? Четверо? n?
Головним чином, розбиття його на більш ніж дві частини та рекомбінація більш ніж двох результатів призводить до більш складної реалізації, але не змінює основної (Big O) характеристики алгоритму - різниця є постійним фактором і може призвести до уповільнення якщо поділ та рекомбінація більш ніж 2 підмножин створює додаткові накладні витрати.
Наприклад, якщо ви робите сортування тристороннього злиття, то на етапі рекомбінації вам зараз доведеться знайти найбільший з 3 елементів для кожного елемента, для чого потрібно 2 порівняння замість 1, тож ви зробите вдвічі більше порівнянь . В обмін на це ви зменшуєте глибину рекурсії в коефіцієнт ln (2) / ln (3) == 0,63, тому у вас на 37% менше свопів, але на 2 * 0,63 == 26% більше порівнянь (і доступу до пам'яті). Добре це чи погано, залежить від того, яка вартість вашої апаратури дорожча.
Я також бачив багато посилань на тристоронній кваксор. Коли це швидше?
Очевидно, що може бути доведено, що для подвійного зсувного варіанту швидкості споживання потрібна однакова кількість порівнянь, але в середньому на 20% менше свопів, тому це чистий прибуток.
Що використовується на практиці?
У наші дні навряд чи хтось програмує власні алгоритми сортування; вони використовують один, наданий бібліотекою. Наприклад, API Java 7 фактично використовує подвійний шарнір.
Люди, які насправді програмують свій алгоритм сортування з якихось причин, як правило, будуть дотримуватися простого двостороннього варіанту, оскільки менший потенціал помилок перевищує 20% кращу ефективність більшості часу. Пам'ятайте: на сьогоднішній день найважливішим підвищенням продуктивності є те, коли код переходить від "не працює" до "працює".