我們可以使用MPI並行化遞歸函數嗎? 我想並行化快速排序功能,但不知道它是否在MPI中起作用,因爲它是遞歸的。我也想知道我應該在哪裏做平行區域。通過MPI並行化遞歸函數?
// quickSort.c
#include <stdio.h>
void quickSort(int[], int, int);
int partition(int[], int, int);
void main()
{
int a[] = { 7, 12, 1, -2, 0, 15, 4, 11, 9};
int i;
printf("\n\nUnsorted array is: ");
for(i = 0; i < 9; ++i)
printf(" %d ", a[i]);
quickSort(a, 0, 8);
printf("\n\nSorted array is: ");
for(i = 0; i < 9; ++i)
printf(" %d ", a[i]);
}
void quickSort(int a[], int l, int r)
{
int j;
if(l < r)
{
// divide and conquer
j = partition(a, l, r);
quickSort(a, l, j-1);
quickSort(a, j+1, r);
}
}
int partition(int a[], int l, int r) {
int pivot, i, j, t;
pivot = a[l];
i = l; j = r+1;
while(1)
{
do ++i; while(a[i] <= pivot && i <= r);
do --j; while(a[j] > pivot);
if(i >= j) break;
t = a[i]; a[i] = a[j]; a[j] = t;
}
t = a[l]; a[l] = a[j]; a[j] = t;
return j;
}
如果還有另一個簡單的快速排序代碼,我也會很感激。