?
Ich würde sagen, die Alternative zum dritten Array ist die direkte Ausgabe.
int* func(const int* values, const int* pos, int cnt)
{
int* ptr = malloc(cnt*sizeof(int));
for(int i=0;i<cnt;++i)
{
if(pos[i] >= 1 && pos[i] <= cnt)
ptr[pos[i]-1] = values[i];
}
return ptr;
}
int main()
{
const int values[] = {5,7,9,3,1};
const int positions[] = {3,5,2,1,4};
const int num = sizeof(values)/sizeof(*values);
// 1. Drittes Array
int* p = func(values, positions, num);
for(int i=0;i<num;++i)
{
printf("%d ", p[i]);
}
free(p);
putchar('\n');
// 2. Direkt ausgeben
for(int i=0;i<num;++i)
{
for(int k=0;k<num;++k)
{
if(positions[k]-1==i)
{
printf("%d ", values[k]);
break;
}
}
}
}