问题一、给定一个数组,要求把数组内元素的顺序随机打乱,然后输出,主要是要保证效率。
这个算法其实简单,首先从所有元素中随机选取一个与第一个元素进行交换,然后在第二个之后选择一个元素与第二个交换,直到最后一个元素。
这样能确保每个元素在每个位置的概率都是1/n。代码如下:
#include
#include
#include
// 随机打乱一个数组
void random(int a[], int n)
{
int index, tmp, i;
srand(time(NULL));
for (i = 0; i
{
index = rand() % (n - i) + i;
if (index != i)
{
tmp = a[i];
a[i] = a[index];
a[index] = tmp;
}
}
}
int main()
{
int a[] = {1, 2, 3, 4, 5};
int i;
random(a, 5);
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
把一个数组的顺序打乱,很常用的算法,比如洗牌。
问题二、给定一个文件,文件每行存放一个QQ号,请将其随机打乱:
阅读(2067) | 评论(0) | 转发(0) |