测试环境:酷睿双核2.9G(E7500),4G内存
list
为QStringList。
Solution1:效率非常低(数组长度1W以后就开始无响应需要循环10w次左右耗时2s)
- int tempCount = 0;
-
QList<int> indexList;
-
int count = list.count();
-
while ( indexList.count() < count )
-
{
-
++tempCount;
-
int i = qrand() % list.count() ;
-
if ( indexList.indexOf( i ) == -1 )
-
{
-
indexList.append( i );
-
}
-
}
Solution2:时间复杂度为O(n),但是增加空间复杂度和list的操作开销,100w元素需要9s
QStringList tempList
;-
while ( list.count() > 0 )
-
{
-
int i = qrand() % list.count() ;
-
tempList.append( list.takeAt( i ) );
-
}
Solution3:效率理想,元素较多的时候耗时至少是solution2的100倍,1000W个元素的数组只要700多毫秒。
- int count = list.count();
-
int times = count;
-
-
for ( int i = 0; i < times; ++i )
-
{
-
int randIndex = qrand() % count ;
-
int cIndex = i % count;
-
-
if ( cIndex != randIndex )
-
{
-
qSwap( list[cIndex], list[randIndex] );
-
}
-
}
阅读(2410) | 评论(0) | 转发(0) |