我有一个int*
数组,我想对这个数组执行随机排列。该函数与MATLAB中的randperm
类似。例如,我有一个数组int* A=[0 1 1 0]
,如果我调用randperm(A,sizeof A)
,那么一个可能的输出将是A=[1 0 0 1]
这是我的功能,但似乎有错误。任何人都可以确定这个错误是什么吗?
void randperm(int* permMatrix,int n)
{
int i, j, t;
for(i=0; i<n; i++) {
j = rand()%(n-i)+i;
t = permMatrix[j];
permMatrix[j] = permMatrix[i];
permMatrix[i] = t;
}
for(i=0; i<n; i++) {
printf("%d ",permMatrix[i]);
}
}
答案 0 :(得分:4)
最好使用存在的标准库设施。在这种情况下,<algorithm>
标题的函数std::random_shuffle()
完全符合您的要求:
#include <algorithm>
void randperm(int* matrix, int size)
{
std::random_shuffle(matrix, matrix + size);
}
答案 1 :(得分:0)
'randperm'的实现是正确的,但可能是sizeof(A)不被评估为4.请检查'n'的值。