考虑下面的问题:对n个元素的序列A进行快速排序。快速排序算法是一种分治的算法。算法首先选取一个轴元素x,然后把A分成两个子序列A0和A1,其中A0中的所有元素小于x,而A1中的所有元素大于等于x,这是算法的分割部分。对得到的子序列递归地进行上面的分割过程,然后用经过排序的子序列组合成最后的结果序列A'。快速排序的过程可以用下面的图来示例。
  

  其中的深色的元素为选中的轴元素。
  现在考虑如何根据算法的分-治特性来对快速排序算法进行任务分解。从上面的图可以看出,对任务树的每一层,每个子任务的继续分割是可以并行执行的,而且它们互相独立。因此对计算的分解实际上也是一棵树。算法开始时,只有一个序列(树的根节点),我们用一个处理器来完成对它的第一次分割。分割完成后,我们得到了第一层中的2个子序列,对这两个子序列的分割可以在两个处理器上分别进行,(如果序列足够长)树中的第i层中会出现2i个子序列,它们可以由2i个处理器独立并行完成。

  递归分解处理的问题(的串行算法)并不一定是递归的。比如下面的问题:n个元素的未排序序列A,求A的最小值。下面的串行算法对A采取逐个扫描的方法:

   Minimum(A, n)
   {
    min = A[0];
    for (i=1; i<n; i++)
     if (A[i] < min)
      min = A[i];
    return min;
   }

  这个算法本身没有表现出任何的并行性(实际上与min的使用有关)。一种可行的解决办法是采用分治的策略来重新得到一个算法,然后采用递归分解的方法来开发并行性。改写后的算法如下(递归算法):

   Minimum(A, n)
   {
    if (n == 1)
     return A[0];
    lmin = Minimum(A, n/2);
    rmin = Minimum(A+n/2,n-n/2);
    if (lmin < rmin)
     return lmin;
    else
     return rmin;
   }

  这个算法很好理解,思路与上面的快速排序几乎一样。上面算法的递归树如下图(对8个元素的序列进行操作)所示:
       

  现在对任务的分解就简单多了。注意与前面的并行快速排序算法相反,这个分-治算法更多的计算时间花费在结果的组合阶段。因此,这个算法的并行版本在执行时,最开始有n个任务可以并行执行(虽然不需要),然后可以并行执行的任务依次减半(沿着树往上走),到根节点时,只能由一个处理器执行来的到最后的结果。