Каждый алгоритм «разделяй и властвуй» можно легко распараллелить. Сортировка слиянием и быстрая сортировка выполняются по одной и той же базовой схеме, которая может выполняться параллельно:
procedure DivideAndConquer(X)
if X is a base case then
Process base case X
return
Divide X into [Y0 … Yn[
for Y ∈ [Y0 … Yn[ in parallel do
DivideAndConquer(Y)
Merge [Y0 … Yn[ back into X
В чем они отличаются, так это в быстрой сортировке, деление является сложным, а объединение - тривиальным (без операции). В случае слияния все наоборот: деление тривиально, а слияние затруднено.
Если вы реализуете вышеуказанную схему, на самом деле быструю сортировку проще распараллелить, потому что вы можете просто забыть о шаге слияния. Для сортировки слиянием необходимо отслеживать завершенные параллельные задачи. Это нарушает балансировку нагрузки.
С другой стороны, если вы будете следовать приведенной выше схеме, у вас возникнет проблема: самое первое деление и самое последнее объединение будут использовать только один процессор, а все остальные процессоры будут простаивать. Таким образом, имеет смысл распараллелить и эти операции. И здесь мы видим, что распараллеливание шага разделения в быстрой сортировке намного сложнее, чем распараллеливание шага объединения в сортировке слиянием.