【发布时间】:2017-11-23 11:04:09
【问题描述】:
int partition(int arr[], int l, int h)
{
int x = arr[h];
int i = (l - 1);
#pragma omp parallel for
for (int j = l; j <= h - 1; j++)
{
if (arr[j] <= x)
{
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[h]);
return (i + 1);
}
我尝试在迭代快速排序程序上使用 OpenMP。 上面的代码是分区部分,它使用 arr[] 中的最后一个元素作为枢轴 我想在快速排序中,xxx 枢轴 yyy 随着我从最左边增加到枢轴,首先交换哪个数字并不重要,这些数字小于枢轴
但产生的答案不是排序数组。(部分排序) 在那之后,我猜这是由“i++”上的竞争条件引起的 我测试了 i(printf i 在交换之后/之前),i 是连续的(错误的顺序,但没关系?) 这应该意味着从最左边到枢轴位置的值已经改变,没有竞争条件。
我也试过添加
#pragma omp atomic
之前是i++,但是改之后好像没什么不同。 我只在这个循环上使用并行。而且我不知道代码的哪一部分导致了无序排序。
【问题讨论】:
标签: c++ sorting visual-studio-2017 openmp