para_quicksort(data, i, j, m, id) if (j - i) <= k or m = 0 then P_id call quicksort(data, i, j) else P_id: r = partition(data, i, j) P_id: send data[r + 1, j] to P_id + 2^(m - 1) - 1 para_quicksort(data, i, r - 1, m - 1, id) para_quicksort(data, r + 1, j, m - 1, id + 2 ^ (m - 1) - 1) P_id + 2^m - 1 send data[r + 1, j] back to P_id end if End
枚举排序
1 2 3 4
para_esort(i, j) 将区间 [i, j] 划分为 nr_thrd 个区间 [Pi, Qi] par doesort(Pi, Qi) End
归并排序
1 2 3 4 5 6 7 8 9 10
para_mergesort(i, j) if (j - i) <= len / nr_thrd then mergesort(i, j) else m = (i + j) / 2 par do para_mergesort(i, m) par do para_mergesort(m + 1, j) merge end if End