自己写的一个小算法,从max个数中去num个随机数字出来,比方说从10个数中取4个随机数字:1、5、6、9
下面这个函数就是为了实现这个功能写的,里面主要涉及到了一个算法如何高效打乱0到max个数字,但是这个写的还不是最好的,效率只是到了N的级别,更深一点的暂时也没想那么多,别的到没什么技术含量。
// 从MaxNum个数字中获取RandNum个不相同的数字
vector<int> GetDiffentRandNum(const int iRandNum, const int iMaxNum)
{
vector<int> oNumVec;
if (iMaxNum < iRandNum)
{
return oNumVec;
}
int i=0;
vector<int> oMaxNum(iMaxNum,0);
for (i=0; i<iMaxNum; ++i)
{
oMaxNum[i] = i;
}
int iTmp = 0;
int iRandIndex = 0;
for (i=0; i<iRandNum; ++i)
{
iRandIndex = rand()%(iMaxNum-i);
iTmp = oMaxNum[i];
oMaxNum[i] = oMaxNum[i+iRandIndex];
oMaxNum[i+iRandIndex] = iTmp;
oNumVec.push_back(oMaxNum[i]);
}
return oNumVec;
}