2

我有一个int*数组,我想对该数组执行随机排列。该功能与randpermMATLAB 中的类似。例如,我有一个数组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]);
    }
}
4

2 回答 2

6

最好使用存在的标准库设施。在这种情况下,<algorithm>标头具有std::random_shuffle()完全符合您要求的功能:

#include <algorithm>

void randperm(int* matrix, int size)
{
    std::random_shuffle(matrix, matrix + size);
}
于 2013-11-06T06:49:01.610 回答
0

“randperm”的实现是正确的,但可能 sizeof(A) 未评估为 4。请检查“n”的值。

于 2013-11-06T07:12:28.987 回答