简单的一个小数组做打乱顺序的操作,因为太小,感觉也没必要进行二分优化了
static void randomArray(int array[], int length)//数组元素的乱序排列
{
for(int i=0; i< length; i++)
{
QTime t;
t= QTime::currentTime();
qsrand(t.msec()+t.second()*1000);
int r = i + qrand()%(length-i);
int temp=array[i];
array[i] = array[r];
array[r] = temp;
}
}
使用示例:
int array[4] = {1, 2, 3, 4};
qDebug()<<"before "<<array[0]<<array[1]<<array[2]<<array[3];
randomArray(array, 4);
qDebug()<<"after "<<array[0]<<array[1]<<array[2]<<array[3];
思路很简单,用QTime::currentTime()和qsrand函数生成随机种子,再由qrand()函数生成随机数,与数组size取余得到数组索引偏移值,最后对整个循环交换,这样就得到了乱序的数组列表了
二分优化下,当数组比较大时用得上:
static void randomArray(int array[], int length)//数组元素的乱序排列
{
for(int i=0; i< length/2+1; i++)
{
QTime t;
t= QTime::currentTime();
qsrand(t.msec()+t.second()*1000);
int r = i + qrand()%(length-i);
int temp=array[i];
array[i] = array[r];
array[r] = temp;
}
}
work
网友评论