对 C++ 中的数组执行随机排列

Perform a random permutation on an array in C++

本文关键字:执行 随机 排列 数组 C++      更新时间:2023-10-16

我有一个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]);
    }
}
最好

使用存在标准库设施的地方。在这种情况下,<algorithm>标头具有一个函数std::random_shuffle(),该函数完全可以执行所需的操作:

#include <algorithm>
void randperm(int* matrix, int size)
{
    std::random_shuffle(matrix, matrix + size);
}

'randperm' 的实现是正确的,但可能是 sizeof(A) 没有被评估为 4。请查看值"n"。