#include <stdio.h>
#include <omp.h>
struct Compare { int val; int index; };
#pragma omp declare reduction(maximum : struct Compare : omp_out = omp_in.val > omp_out.val ? omp_in : omp_out)
void selectionsort(int* arr, int size)
{
for (int i = size - 1; i > 0; --i)
{
struct Compare max;
max.val = arr[i];
max.index = i;
#pragma omp parallel for reduction(maximum:max)
for (int j = i - 1; j >= 0; --j)
{
if (arr[j] > max.val)
{
max.val = arr[j];
max.index = j;
}
}
int tmp = arr[i];
arr[i] = max.val;
arr[max.index] = tmp;
}
}
int main()
{
int x[10] = {8,7,9,1,2,5,4,3,0,6};
selectionsort(x, 10);
for (int i = 0; i < 10; i++)
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxvbXAuaD4KCnN0cnVjdCBDb21wYXJlIHsgaW50IHZhbDsgaW50IGluZGV4OyB9OwojcHJhZ21hIG9tcCBkZWNsYXJlIHJlZHVjdGlvbihtYXhpbXVtIDogc3RydWN0IENvbXBhcmUgOiBvbXBfb3V0ID0gb21wX2luLnZhbCA+IG9tcF9vdXQudmFsID8gb21wX2luIDogb21wX291dCkKCnZvaWQgc2VsZWN0aW9uc29ydChpbnQqIGFyciwgaW50IHNpemUpCnsKICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+IDA7IC0taSkKICAgIHsKICAgICAgICBzdHJ1Y3QgQ29tcGFyZSBtYXg7CiAgICAgICAgbWF4LnZhbCA9IGFycltpXTsKICAgICAgICBtYXguaW5kZXggPSBpOwogICAgICAgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvciByZWR1Y3Rpb24obWF4aW11bTptYXgpCiAgICAgICAgZm9yIChpbnQgaiA9IGkgLSAxOyBqID49IDA7IC0taikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChhcnJbal0gPiBtYXgudmFsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtYXgudmFsID0gYXJyW2pdOwogICAgICAgICAgICAgICAgbWF4LmluZGV4ID0gajsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnQgdG1wID0gYXJyW2ldOwogICAgICAgIGFycltpXSA9IG1heC52YWw7CiAgICAgICAgYXJyW21heC5pbmRleF0gPSB0bXA7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgICAgIGludCB4WzEwXSA9IHs4LDcsOSwxLDIsNSw0LDMsMCw2fTsKICAgICAgICBzZWxlY3Rpb25zb3J0KHgsIDEwKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQogICAgICAgICAgICAgICAgcHJpbnRmKCIlZFxuIiwgeFtpXSk7CiAgICAgICAgcmV0dXJuIDA7Cn0=