对 C++ 中的数组执行随机排列
Perform a random permutation on an array in C++
我有一个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"。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++,系统无法执行指定的程序
- 为什么 Serial.println(<char[]>);返回随机字符?
- 使用C++中的模板和运算符重载执行矩阵运算
- 字符串-C++后显示的随机字符
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 执行函数时导致崩溃的变量
- GCC:随机构建导致执行期间分段错误
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 我的控制台正在打印随机单词以及没有执行正确的数学运算
- 在标准输出中执行打印会导致数组中随机分配值
- 从本地工作,但在执行之间的随机端口上没有收到任何内容
- 执行随机开关函数的QT方式是什么连续两次使用相同情况的方法
- C++执行执行的 bash 脚本随机停止
- 我如何在 c++ 中执行随机结果,如下所示的代码
- 执行随机for循环并每次保存随机值
- 对 C++ 中的数组执行随机排列
- c++随机数生成器:如何在每次执行时使数字随机
- 游戏有时不会执行随机选择的策略