C语言复现Matlab的randperm(N,M)函数,产生不重复的随机整数

Matlab中:P = randperm(N,M)
产生1~N中M个随机数,不重复
所以randperm(N,M)中,N一定大于等于M。

#include 
#include 

void randperm(int N, int M, int *P)
{
	for(int i = 0; i < M; i++)
	{
		P[i] = (rand() % N + 1);
		for(int j = 0; j < i; j++) // 判断和前面的数是否重复
		{
			if(P[i] == P[j]) { i--; break;}
		}
	}
}

int main()
{
	int N = 10, M = 5;
	int *p = new int[M];
	srand((unsigned int)time(NULL)); //随机数种子放到外面,保证在多次调用函数时产生的随机数不会重复
	randperm(N, M, p);
	for (int i=0; i<M; i++)
		printf("%d\t",p[i]);
	delete[] p;
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

你可能感兴趣的:(C++学习,matlab,c语言)