Tôi đã viết hàm này trong C và tôi muốn nó tạo một hoán vị ngẫu nhiên hoặc một danh sách các số từ 1 đến n. Tôi gặp khó khăn khi nhận được nó để không có số lặp lại. Vì vậy, nếu bạn có n = 4, tôi muốn nó trả về một mảng ngẫu nhiên có chứa 1-4 mỗi một lần duy nhất, ví dụ: {1,3,4,2}Làm thế nào để tạo một hoán vị ngẫu nhiên của một mảng?
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;
}
tra cứu Fisher-Yates shuffle ... –