#include
#include
#include
// 随机打乱一个数组
void random(int a[], int n)
{
int index, tmp, i;
srand(time(NULL));
for (i = 0; i
概率分析(证明):每个元素在第一个的位置是1/n,这是毫无疑问的。第一次交换时,一个元素不在第一个位置的概率是(n-1)/n。所以当第二次交换时,一个元素在第二个位置的概率是(n-1)/n*1/n-1=1/n。同时,一个元素不在第一个第二位置的概率是多少呢?很显然是1-1/n-1/n=(n-2)/n。那么在第三次交换时,一个元素在第三个位置的概率就是(n-2)/n*1/(n-2)=1/n。依此类推……
ps:当然你也可以反着来,首先从1...n中随机选取一个元素与第n个交换,然后从1...n-1中随机选取一个元素与第n-1个交换,依此类推…… ;>
相关文章: