产生一个1~n的随机序列(即的一种排列),要求序列中的数据元素之不能重复。

来源:百度知道 编辑:UC知道 时间:2024/09/28 11:01:35
请分别采用C++语言的顺序表和链表实现。
即(1~n的一种排列)

有一种方法,不过是不是每种排列出现的概率相等,数学上的证明我还没有时间去想,但效果看上去还是挺好的,如果楼主数学比较好,算出了概率分布,就劳烦发到我的邮箱icesnow_no@163.com,那我就多谢了。

#include <iostream>
#include <time.h>
#include <stdlib>

using namespace std;

const int N = 20;

int main()
{
int a[N];
for(int i=0;i<N;i++)
a[i]=i+1; //1~N;
srand(time(NULL));
for(int i=0;i<N;i+=2)
{
swap(a[i],a[rand()%N])
}
//Show the result:
cout << "The Result is :\n";
for(int i=0;i<N;i++)
cout << a[i] << ' ';
cout << endl;
return 0;
}

就用数组写一个了,链表是类似的,就无外乎是rand()%N表示指针的移动次数。swap()表示交换,我这里没写。