使用qsrand将特定的数组列表随机排列C++

2021-06-18  本文已影响0人  田陌允

简单的一个小数组做打乱顺序的操作,因为太小,感觉也没必要进行二分优化了

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
上一篇 下一篇

猜你喜欢

热点阅读