この関数を C で作成しました。ランダムな順列または 1 から n までの数値のリストを作成したいと考えています。繰り返し番号を持たないようにするのに苦労しています。したがって、n = 4 の場合、1 ~ 4 をそれぞれ 1 回だけ含むランダムな配列を返したいと思います。たとえば、{1,3,4,2} です。
int* random(int n)
{
int* r = malloc(n * sizeof(int));
// initial range of numbers
for(int i=0;i<n;++i){
r[i]=i+1;
}
// shuffle
for (int i = 1; i <= n; ++i){
int j = rand() % i;
r[i] = r[j];
r[j] = i;
}
return r;
}