生产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--;
	}
}



转载于:https://my.oschina.net/u/1171424/blog/212084

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值