У меня есть один массив int*
и я хочу выполнить произвольную перестановку в этот массив. Функция аналогична функции randperm
в MATLAB. Например, у меня есть массив 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".
int *
не является матрицей, но может быть массивом.