j**l 发帖数: 2911 | 1 假定K <= N
下面两种方法哪个更好?
方法一
int remain = N;
int select = K;
for (int i = 0; i < N; i++)
{
if (rand() % remain < select)
{
cout << i << " ";
--select;
}
--remain;
}
方法二,Knuth洗牌算法K步以后停止
for (int j = 0; j < K; j++)
{
int index = random(j, N-1); // including j and N-1
swap(array[j], array[index]);
cout << array[index] << " ";
} | j***n 发帖数: 301 | 2 我喜欢2,呵呵
【在 j**l 的大作中提到】 : 假定K <= N : 下面两种方法哪个更好? : 方法一 : int remain = N; : int select = K; : for (int i = 0; i < N; i++) : { : if (rand() % remain < select) : { : cout << i << " ";
|
|