生产N个不重复随机数

    参加3月22日深圳尚游复试的时候被问到的问题。当时一直没有想出比较好的解决方法,只提出一个使用链表的解决方法。时间复杂度上会比这个算法慢很多,所以在此记录这个算法,以免遗忘。

void Random_m_n(int m, int n, int *arry)
//从1~m个数字中随机取出n个不相同的数字
{
	srand((int)time(0));	
	//重置时间算子,用于产生随机数
	int * data_m = new int[m];
	for(int i = 0;i < m; i++)
	{
		data_m[i] = i+1;
	}						
	//生成1~m个数字,存入数组中

	while (n--)
	{
		int i = rand() % m;	
		//产生范围0~m-1内的一个随机数				
		arry[n] = data_m[i];						
		//拷贝到目标数组中							
		data_m[i] = data_m[m];						
		//把当前位置的数字替换成其他不重复数字		
		m--;
	}
}



你可能感兴趣的:(随机数,不重复)